有没有办法看到Scala中匹配期间接收到的通配符模式?

时间:2012-02-10 16:22:50

标签: scala case wildcard match actor

在Akka或Scala Actor中进行模式匹配时,是否有办法查看匹配是什么(即)通配符_正在评估什么?是否有一种简单的方法可以查看从邮箱中处理哪条消息无法找到匹配项?

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

谢谢,

布鲁斯

2 个答案:

答案 0 :(得分:10)

你可以像这样定义变量:

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

您甚至可以为与@匹配的邮件指定名称:

def receive = {
  case msg @ A => // do someting with `msg`
  ...
}

答案 1 :(得分:3)

在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
}