2009-06-29 7 views
13

Ich habe gerade diesen Fall Klasse im actors Paket Scala gesehen:Wie funktioniert das Case-Class-Matchmuster?

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

Und in der JavaDoc beschreibt es Verwendung in der folgenden Form:

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

Warum ist das nicht:

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

Ist der Knall-Operator! ein spezieller Fall ähnlich wie Methoden, die in einem Doppelpunkt enden:

Antwort

33

Bei der Mustererkennung interpretiert der Scala-Compiler o1 c1 o2 genauso wie c1(o1, o2). Deshalb funktioniert :: auch in Pattern Matches.

+2

Prost für die Antwort. Eine Schande, es gibt nicht mehr Punkte von Scala Fragen zu beantworten! –