6

ここでは Akka アクター ライブラリを使用しています。アクター ライブラリは、"actor" を拡張するアクターがさまざまなメッセージを処理するために実装する必要がある部分関数 "receive" を定義します。特性 "clockActor" が Actor を拡張し、"MasterClock" と "SubClock" が "clockActor" を拡張するアプリケーションの特性階層を作成しています。「クロック」トレイトの受信機能にクロックの共通機能を追加しようとしていますが、マスターおよびサブクロックトレイトの受信機能に追加機能を追加するにはどうすればよいですか?

つまり、部分関数に余分な case ステートメントを追加する方法が必要です。アイデア?

4

2 に答える 2

14

PartialFunctionsすでに提案したように、を使用して簡単に作成できますorElse

trait ClockActor {

    def commonOp = {
        case ... => ...
    }

}

class MasterClock extends Actor with ClockActor {

    def receive = commonOp orElse masterOp

    def masterOp = {
        case ... =>  ...
    }

}

class SubClock extends Actor with ClockActor {

    def receive = commonOp orElse subOp

    def subOp = {
        case ... =>  ...
    }

}
于 2013-01-09T15:47:51.310 に答える
1

頭に浮かぶのは、次のようなことをすることです。

trait ClockActor {
  def pf:PartialFunction[String, Boolean] = {
    case "a" => true
    case v if(_pf.isDefinedAt(v)) => _pf.apply(v)
  }

  def _pf:PartialFunction[String, Boolean] = Map.empty
}

object MasterClock extends ClockActor {

  override def _pf:PartialFunction[String, Boolean] = {
    case "b" => false
  }

  println(pf("a"))
  println(pf("b"))

}

出力は次のとおりです。

scala> MasterClock
true
false

trueは Trait の部分関数の定義から取得されClockActorfalseは Object から取得されMasterClockます。

于 2013-01-09T14:38:48.653 に答える