【发布时间】:2016-07-14 12:31:05
【问题描述】:
我是 Scala 新手。我对以下示例感到困惑。
class AClass extends Actor{
def receive = {
case B => println("Let's do B")
case C => println("Let's do C")
}
}
trait Request
case object B extends Request
case object C extends Request
object Customer{
def main(args: Array[String]) : Unit = {
val system = ActorSystem("Iwanttoeat")
val cook: ActorRef = system.actorOf(Props[CookSomething])
cook ! B
cook ! C
}
}
我有三个问题。
'receive' 方法没有输入参数。我匹配什么?我猜它来自'cook!乙'。 !意味着发送和忘记。 我很困惑,因为该方法没有明确提到输入参数,但是我将 B 或 C 与什么进行比较?
我看到了模式匹配示例。他们有“匹配”关键字。 大括号前是否省略了“匹配”?
3.[不是很重要]为什么'recieve'没有括号?我想知道为什么它不像 recieve() = {...} 我需要你的教导!
干杯
宋
【问题讨论】:
-
Receive 是一个偏函数(准确地说是
PartialFunction[Any, Unit]),{}带有 case 语句的大括号只是在 scala 中定义它们的语法糖。请参阅the partial function doc 或使用此内容输入搜索引擎。 -
谢谢你,亚历克斯的评论。我一直在思考。我在网上可以看到PartialFunction往往和模式匹配有关。
标签: scala pattern-matching akka