模式匹配Scala中的代码块

时间:2015-09-07 14:14:25

标签: scala pattern-matching

我正在学习Scala,我偶然发现模式匹配问题: 我想将一段代码传递给akka.actor,这样演员可以执行它,它只是为了一个教程,所以我没有明确的例子说明我想要使用它,无论如何我正在尝试看起来像这样:

override def receive: Receive = {
    case (block: => Unit) => block
    case _ => println("cant work with that")
}
不幸的是,这不会奏效。我希望你们知道我想做什么。

EDIT_1

我发现,如果我只是模式匹配Any,它会起作用,但由于我现在匹配Any,这非常不精确且也很危险:

override def receive: Receive = {
    case block => block
    case _ => println("cant work with that")
}

您看到传递的代码块现在已匹配并执行,但阻止匹配Any的事情,所以这仍然不是我想要的

1 个答案:

答案 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"))
相关问题