2016-11-21 14 views
0

При изучении источников akka я нашел следующее в akka.event.slf4j.SLF4JLogger актер:Что означает @ в Scala?

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 - все объекты с применением методов.

+0

@ c1moore ой, что это правильно, не нашли ответ, связанный – ipoteka

ответ

2

Это называется переменным связыванием:

В дополнении к автономным переменным шаблонам, вы также можете добавить переменные в любой другой шаблон. Вы просто пишете имя переменной, при знаке (@), а затем шаблон. Это дает вам шаблон с переменным связыванием . Смысл такого шаблона состоит в том, чтобы выполнить соответствие шаблону как обычно, и если шаблон успешно завершен, установите переменную в соответствующий объект так же, как и с простым шаблоном переменной.

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