2009-06-29 21 views
13

Je viens de voir cette classe de cas dans le paquet Scala actors:Comment fonctionne ce modèle de correspondance de classe de cas?

case class ! [a](ch: Channel[a], msg: a) 

Et dans le JavaDoc il décrit l'utilisation sous la forme suivante:

receive { 
    case Chan1 ! msg1 => ... 
    case Chan2 ! msg2 => ... 
} 

Pourquoi est-ce pas:

receive { 
    case !(Chan1, msg1) => ... 
    case !(Chan2, msg2) => ... 
} 

L'opérateur bang! un cas particulier de la même manière que les méthodes se terminant par un signe deux-points:

Répondre

33

Lors de la mise en correspondance de modèles, le compilateur Scala interprétera o1 c1 o2 de la même manière que c1(o1, o2). C'est pourquoi :: fonctionne aussi à l'intérieur des motifs.

+2

Bravo pour la réponse. Dommage qu'il n'y ait pas plus de points à recevoir en répondant aux questions de Scala! –