我正在学习Scala,我偶然发现模式匹配问题: 我想将一段代码传递给akka.actor,这样演员可以执行它,它只是为了一个教程,所以我没有明确的例子说明我想要使用它,无论如何我正在尝试看起来像这样:
override def receive: Receive = {
case (block: => Unit) => block
case _ => println("cant work with that")
}
不幸的是,这不会奏效。我希望你们知道我想做什么。
我发现,如果我只是模式匹配Any
,它会起作用,但由于我现在匹配Any
,这非常不精确且也很危险:
override def receive: Receive = {
case block => block
case _ => println("cant work with that")
}
您看到传递的代码块现在已匹配并执行,但阻止匹配Any
的事情,所以这仍然不是我想要的
答案 0 :(得分:3)
您只能按名称传递参数作为方法的参数。这样使用它是无效的:
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"))