Scala新手,了解Akka演员模式匹配的例子

时间:2016-03-26 23:39:49

标签: scala pattern-matching akka

我是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
  } 
}

我有三个问题。

  1. 'receive'方法没有输入参数。我能从中得到什么?我想这是来自'厨师! B”。 !意味着发送和忘记。 我很困惑,因为没有使用该方法明确提到的输入参数,但我将B或C与之进行比较?

  2. 我看到了模式匹配示例。他们有'匹配'关键字。 在大括号之前省略了'匹配'吗?

  3. 3. [不是很重要]为什么'接收'没有支架?我想知道为什么它不像recieve()= {...}我需要你的教学!

    干杯

1 个答案:

答案 0 :(得分:3)

  1. Akka actor的receive方法是具有签名PartialFunction[Any, Unit]的部分函数,​​如Akka Documentation中所述。在Scala中,可以使用省略输入变量的特殊语法定义部分函数,​​并直接进行模式匹配。有关详细信息,请参阅Effective Scala
  2. 请参阅上面有关部分函数的特殊语法的注释。
  3. 在Scala中,您可以省略没有任何参数的方法的括号。