1

重複の可能性:
Scala Actor モデルで bang(!) 演算子をオーバーロードする方法は?

Scala でのアクター モデルの実装で、bang(!) 演算子をオーバーライドできますか? この演算子をオーバーロードして、メッセージ パッシングの操作を変更する必要がありますか?

アクターが他のアクターにメッセージを送信したときに送信されたメッセージのログを含める必要があります。私は

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

これはうまくいきます。しかし、送信するメッセージに応じて、! の動作を区別したいと考えています。

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

上記の場合、最初に ! 操作、ログを実行する必要があります。2番目に、画面に印刷したいだけです。オーバーライド コードでこれら 2 つのメッセージ送信表記を区別するにはどうすればよいですか?

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 に答える