研究akka
的来源时,我在akka.event.slf4j.SLF4JLogger
Actor中找到以下内容:
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
都是具有应用方法的所有对象。
它称为变量绑定:
除了独立变量模式外,您还可以添加一个 变量到任何其他模式。您只需写入变量名称,一个 在标志(@),然后是图案。这为您提供了可变的结合 图案。这种模式的含义是执行模式匹配 正常,如果模式成功,请将变量设置为 与简单的变量模式一样匹配的对象。
http://www.artima.com/pins1ed/case-classes-and-pattern-mattering.html