1

可能重复:
如何在 Scala Actor 模型中重载 bang(!) 运算符?

在 Scala 中的 Actor 模型实现中,我们可以覆盖 bang(!) 运算符吗?我需要通过重载这个操作符来修改消息传递的操作吗?

我需要记录任何参与者向任何其他参与者发送消息时发送的消息。我从

override def !(msg:Any):Unit =
{
  //logic for writing to logs..
  super.!(msg)
}

这工作正常。但是,我想根据我发送的消息来区分 ! 的行为。

actor_name!(arg1,arg2,arg3)
actor_name1!(arg4, arg5)

在上述情况下,首先!操作,我需要执行日志记录。第二个!,我只想在屏幕上打印。我如何区分覆盖代码中的这两种消息发送符号?

4

1 回答 1

1

也许像这样?

override def !(msg: Any) {
    msg match {
        case msg@(arg1, arg2, arg3) => /* your logic here... */ ; super ! msg
        case msg@(arg1, arg2) => /* your logic here... */ ; super ! msg
    }
}
于 2012-11-17T11:09:58.787 回答