2016-11-21 2 views
0

Lors de l'étude des sources de akka je trouve ce qui suit dans l'acteur akka.event.slf4j.SLF4JLogger:Que signifie @ dans 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]) } 
    //... 
} 

Je ne comprenais pas tout à fait ce qui est le signe @. Ce n'était pas une méthode et il n'y a aucune déclaration de event dans la portée. Warning, Info et Debug sont tous des objets avec des méthodes d'application.

+0

@ c1moore oh, c'est vrai, na pas trouver réponse liée – ipoteka

Répondre

2

C'est variable appelée reliure:

En plus des motifs variables autonomes, vous pouvez également ajouter une variable à tout autre motif. Vous écrivez simplement le nom de la variable, un au signe (@), puis le motif. Cela vous donne un modèle à liaison variable. La signification d'un tel modèle est d'effectuer la correspondance de modèle normalement, et si le modèle réussit, définissez la variable sur l'objet correspondant tout comme avec un modèle de variable simple.

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