0

在研究来源时,我在演员akka中发现了以下内容:akka.event.slf4j.SLF4JLogger

def receive = {
    //...
    case event @ Warning(logSource, logClass, message) ⇒
      withMdc(logSource, event) { Logger(logClass, logSource).warn("{}", message.asInstanceOf[AnyRef]) }

    case event @ Info(logSource, logClass, message) ⇒
      withMdc(logSource, event) { Logger(logClass, logSource).info("{}", message.asInstanceOf[AnyRef]) }

    case event @ Debug(logSource, logClass, message) ⇒
      withMdc(logSource, event) { Logger(logClass, logSource).debug("{}", message.asInstanceOf[AnyRef]) }
    //...
}

我不太明白这个@标志是什么。它不是一种方法,也没有event范围内的声明。Warning,Info并且Debug都是具有 apply 方法的对象。

4

1 回答 1

2

它被称为变量绑定:

除了独立变量模式之外,您还可以将变量添加到任何其他模式。您只需编写变量名称、一个 at 符号 (@),然后是模式。这为您提供了一个变量绑定模式。这种模式的含义是正常执行模式匹配,如果模式成功,则将变量设置为匹配的对象,就像使用简单的变量模式一样。

http://www.artima.com/pins1ed/case-classes-and-pattern-matching.html

于 2016-11-21T22:04:34.797 回答