2016-11-21 3 views
0

Wenn Quellen akka Studium fand ich folgendes im akka.event.slf4j.SLF4JLogger Schauspieler:Was bedeutet @ in 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]) } 
    //... 
} 

ich nicht ganz verstehen, was das Zeichen @ ist. Es war keine Methode und es gibt keine Deklaration der event im Umfang. Warning, Info und Debug sind alle Objekte mit Methoden zum Anwenden.

+0

@ c1moore oh, das ist richtig, nur knapp sein Ziel im Zusammenhang Antwort finden – ipoteka

Antwort

2

Es variable Bindung genannt:

Neben den eigenständigen variablen Muster, können Sie auch eine Variable jedes andere Muster hinzuzufügen. Sie schreiben einfach den Variablennamen, ein at-Zeichen (@), und dann das Muster. Dies gibt Ihnen ein variabel bindendes Muster. Die Bedeutung eines solchen Musters besteht darin, die Musterübereinstimmung als normal auszuführen, und wenn das Muster erfolgreich ist, setze die Variable auf das übereinstimmende Objekt genau wie bei einem einfachen variablen Muster.

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