0

Akkaアクターイベントバスに必要ないくつかのメソッドを実装することを目的とした次の暗黙的な定義を定義しました。必要なメソッドの概要は、次のドキュメントに記載されています:http ://doc.akka.io/docs/akka/2.0/scala/event-bus.html#Subchannel_Classification

protected implicit def subclassification: Subclassification[Classifier] = {
      def isEqual(a: Classifier, b: Classifier): Boolean = {
        a.equals(b)
      }

      def isSubclass(a: Classifier, b: Classifier): Boolean = {
        a.startsWith(b)
      }

  }

ただし、コンパイルしようとすると、次のエラーが発生します。type mismatch; found : Unit required: akka.util.Subclassification[MessageBus.this.Classifier]

ドキュメントが具体的に求めているものは次のとおりです。

subclassification: Subclassification[Classifier]は、この分類子の他のメソッドによって消費されるisEqual(a:分類子、b:分類子)およびisSubclass(a:分類子、b:分類子)を提供するオブジェクトです。

これでユニットが返されることは承知していますが、これらのメンバーメソッドも提供できる実装を必要にするにはどうすればよいでしょうか。

4

1 に答える 1

3

のサブクラスをインスタンス化するつもりでしたSubclassification[Classifier]か?new Subclassification[Classifier]もしそうなら、Scalaがあなたがやろうとしていることを知っているように言う必要があります。

protected implicit def subclassification: Subclassification[Classifier] = 
  new Subclassification[Classifier] {
    def isEqual(a: Classifier, b: Classifier): Boolean = {
      a.equals(b)
    }

    def isSubclass(a: Classifier, b: Classifier): Boolean = {
      a.startsWith(b)
    }
}

不平を言う理由は、subclassification2つの関数宣言のみを含むコードのブロックを変数に割り当てているためです。Scalaは常にブロック内の最後の式が式の評価対象であると想定し、関数宣言の型はUnit(基本的には何も評価されないことを意味します)であるため、Scalaはブロック全体の型がであると言いUnitます。

ブロックを変数に割り当てるので、タイプは。subclassificationsubclassificationなければなりませんUnit。ただし、タイプはである必要があることを明示的に指定しているSubclassification[Classifier]ため、不一致が発生し、エラーが発生します。

于 2012-09-25T01:33:17.223 に答える