【问题标题】:What does scala enclosure mean?scala 外壳是什么意思?
【发布时间】:2017-02-05 09:02:46
【问题描述】:

我正在查看 ActorLogging here 并遇到了以下语法:

def receive = LoggingReceive {
   case x => ...
}

SomeName { } 这个语法是什么意思?我知道在 scala {} 创建一个语句块,最后一行分配了变量。 cmets将其解释为:

将 Receive 部分函数包装在日志记录附件中

是否有一个技术术语,以便我可以更多地了解它的用法? 注意:我知道偏函数是什么。从 cmets 和答案中,我了解到 LoggingReceive 返回一个部分函数和 apply 的语法。

【问题讨论】:

标签: scala akka


【解决方案1】:

在 akka 中,receive 方法必须将 Receive 作为结果类型。所以在这里他们使用了一个对象LoggingReceive,它有一个apply 方法,定义如下:

def apply(r: Receive)(implicit context: ActorContext): Receive = withLabel(null)(r)

在 Scala 中,我们有一个语法糖结构,所以不用调用:

LoggingReceive.apply(...)

你可以简单地写:

LoggingReceive(...)

还有一件事——在 Scala 中,我们可以使用{...} 括号代替(...) 括号,所以上面的表达式可以写成:

LoggingReceive{...}

所以最后他们只是简单地用LoggingReceiveapply 方法包装receive 方法,该方法调用withLabel() 方法。

【讨论】:

  • 这实际上并没有解释原始发布者寻找的功能。真正的解释请看stackoverflow.com/questions/4386127/…。请参阅答案的“带大小写的函数/部分函数文字”部分。
猜你喜欢
  • 1970-01-01
  • 2015-01-22
  • 2015-04-22
  • 2023-03-27
  • 2014-01-16
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
相关资源
最近更新 更多