我正在查看ActorLogging here,并且遇到了这种语法:
def receive = LoggingReceive {
case x => ...
}
这种语法SomeName { }
是什么意思?我知道在scala {}
中创建一个语句块,最后一行被赋予变量。评论将其解释为:
在日志记录框中包装接收部分功能
是否有技术术语,以便我可以更多地了解它的用法? 注意:我知道部分功能是什么。从评论和答案中我了解到LoggingReceive返回部分函数和apply的语法。
答案 0 :(得分:-1)
在akka中,receive
方法必须以Receive
作为结果类型。所以他们在这里使用的对象LoggingReceive
的{{1}}方法定义如下:
apply
在Scala中,我们有一个语法糖结构,而不是调用:
def apply(r: Receive)(implicit context: ActorContext): Receive = withLabel(null)(r)
您可以简单地写一下:
LoggingReceive.apply(...)
还有另一件事 - 在Scala中我们可以使用LoggingReceive(...)
括号而不是{...}
括号,因此上面的表达式可以写成:
(...)
所以最后他们只是简单地使用调用LoggingReceive{...}
方法的receive
apply
方法包裹LoggingReceive
方法。