Есть ли способ узнать, что шаблон подстановки получает во время матча в Scala? - PullRequest
2 голосов
/ 10 февраля 2012

При выполнении сопоставления с образцом в Akka или Scala Actor, есть ли способ увидеть, что совпадение НЕ было (то есть), что оценивается подстановочным знаком _?Есть ли простой способ узнать, какое сообщение обрабатывается из почтового ящика, для которого не найдено совпадений?

def receive = {
  case A =>
  case B =>
  case C =>
  ...
  case _ =>
    println("what IS the message evaluated?")
}

Спасибо,

Брюс

Ответы [ 2 ]

10 голосов
/ 10 февраля 2012

Вы можете просто определить переменную так:

def receive = {
  case A =>
  case B =>
  case C =>
  ...
  case msg =>
    println("unsupported message: " + msg)
}

Вы даже можете присваивать имена сообщениям, которым вы соответствуете @:

def receive = {
  case msg @ A => // do someting with `msg`
  ...
}
3 голосов
/ 12 февраля 2012

«Правильный» способ сделать это в Akka - переопределить «необработанный» -метод, сделать то, что вы хотите, и либо делегировать поведение по умолчанию, либо заменить его.

http://akka.io/api/akka/2.0-M4/#akka.actor.Actor

Что касается сопоставления с шаблоном в целом, просто сопоставьте что угодно и привяжите его к имени, чтобы вы могли ссылаться на него:

x match {
  case "foo" => whatever
  case otherwise => //matches anything and binds it to the name "otherwise", use that inside the body of the match
}
...