Scala中的模式匹配代码块



我正在学习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"))

最新更新