Как работает шаблон соответствия класса наблюдений? - PullRequest
13 голосов
/ 29 июня 2009

Я только что видел этот класс дел в пакете Scala actors:

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

А в JavaDoc он описывает использование в следующей форме:

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

Почему это не так:

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

Является ли оператор взрыва! особый случай, аналогичный методам, оканчивающимся на двоеточие:

1 Ответ

35 голосов
/ 29 июня 2009

При сопоставлении с образцом компилятор Scala интерпретирует o1 c1 o2 так же, как c1(o1, o2). Вот почему :: работает и в шаблонах.

...