为什么接收称为方法?

时间:2017-01-09 08:45:54

标签: scala akka

Akka docs调用Actor作为方法接收。但是根据API,它是抽象类型成员而不是抽象方法。接收的任何理由都被称为方法?

1 个答案:

答案 0 :(得分:3)

是的,文档可以稍微改进一下。

如果您查看Actor trait,您会注意到receive确实是一种方法。签名中的Actor.Receive是您引用的类型成员,在Actor object中定义。

因此,receive是每个Actor需要实现的抽象方法。它的类型是部分功能;你可以很容易地说出来,因为它需要大量的案例陈述,例如

def receive = {
  case "test" => log.info("received test")
  case _      => log.info("received unknown message")
}

每个case语句都需要Any并返回Unit,因此部分函数的实际类型为PartialFunction[Any, Unit]。为了清晰和简单,Akka家伙决定为该特定类型创建一个占位符,他们称之为Receive,并将它们放在Actor伴侣对象中。

小题外话:很多人对Any类型的消息并不满意,而Akka家伙已经承诺引入打字消息;不知道他们是否在最新版本中发布了它。