我正在学习Scala,我偶然发现了一个模式匹配的问题:我想传递一段代码给akka。所以actor可以执行它,这只是一个教程,所以我没有一个明确的例子,我想在哪里使用它,无论如何,我要做的看起来像这样:
override def receive: Receive = {
case (block: => Unit) => block
case _ => println("cant work with that")
}
不幸的是,不起作用。我希望你们能明白我在做什么。
<标题> EDIT_1 h1> 发现,如果我只是模式匹配Any
,它将工作,但由于我现在匹配Any
,这是非常不精确的,也很危险:
override def receive: Receive = {
case block => block
case _ => println("cant work with that")
}
你看到传递的代码块现在匹配并执行,但块匹配Any
的东西,所以这仍然不是我想要的
只能按名称传递参数作为方法的参数。像这样使用它是无效的:
case (block: => Unit) => block
您只能:
case (block: Unit) => block
但是你可以发送一个函数() => Unit
:
override def receive: Receive = {
case block: (() => Unit) => block()
case _ => println("cant work with that")
}
actorRef ! (() => println("Hello"))