2009-06-29 13 views
13

Ho appena visto questa classe caso nel pacchetto Scala actors:Come funziona questo modello di corrispondenza case case?

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

E nel JavaDoc si descrive l'utilizzo nella forma seguente:

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

perché questo non è:

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

È l'operatore bang! un caso speciale in un modo simile ai metodi che terminano in due punti:

risposta

33

Nel fare pattern matching, il compilatore Scala interpreterà o1 c1 o2 lo stesso c1(o1, o2). Ecco perché lo :: funziona anche all'interno di corrispondenze di pattern.

+2

Cheers per la risposta. A Shame non ci sono più punti da rispondere alle domande di Scala! –