0

私はこの派手な言語のscalaに不慣れで、scalaアクターをログに記録するためのライブラリを作成しようとしています。私のライブラリには、Actorクラスを拡張するクラスLoggerがあります。したがって、アクターモデルを使用するScalaアプリケーションは、代わりにこのクラスから拡張することも、追加のロギング機能のためにActorクラスから拡張することもできます。例えば。クラスMyClassはLoggerを拡張します。私のLoggerクラスでは、誰かがメッセージをアクターに送信するたびに、送信アクターのログファイルによってログに記録されるというロジックを実装しました。このため、誰かがscala send関数を呼び出す代わりに、別のアクターにメッセージを送信するときはいつでも、

caller ! msg

ライブラリのユーザーは

send(caller,msg)

ライブラリ関数は、このメッセージのエントリをログに作成します。これは正常に機能します。アクターが受信するメッセージにも同様の機能を追加したいと思います。つまり、アクターがメッセージを受信するたびに、ライブラリは受信したメッセージのエントリをログファイルに作成する必要があります。これを行う1つの方法は、ユーザーがメソッドを受け取るたびに、次のようなログメソッドを明示的に呼び出すことができることです。

while (true) {
   receive {
     case msg =>
       log(sender, msg)
       // do some stuff
   }
}

ログ機能は、ログにエントリを作成します。ライブラリがユーザーに対して透過的であり、ユーザーが書き込む必要のある追加のコードがなく、すべてがLoggerクラスによって暗黙的にログに記録されるように、ユーザーがこの行log(sender、msg)を書き込む必要がないようにします。これを達成する方法はありますか?前もって感謝します。

4

1 に答える 1

0

Loggerクラスで、メソッドをオーバーライドして、次にをreceive呼び出すようにします。log(sender, msg)super.receive()

于 2012-11-11T08:41:26.883 に答える