0

定义了以下隐式 def,旨在实现 Akka actor 事件总线所需的一些方法。此处的文档中概述了所需的方法: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: Classifier, b: Classifier) 和 isSubclass(a: Classifier, b: Classifier) 供此分类器的其他方法使用。

我知道这将返回一个单元,但我将如何使实现也可以提供这些成员方法?

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)
    }
}

它抱怨的原因是因为您为变量分配了subclassification一个仅包含两个函数声明的代码块。由于 Scala 总是假定块中的最后一个表达式是表达式的计算结果,并且函数声明的类型是Unit(基本上意味着它不计算任何东西),Scala 说整个块都有 type Unit

由于您将块分配给变量subclassificationsubclassification因此必须是类型Unit。但是您明确声明类型应该是Subclassification[Classifier],因此存在不匹配,并且您会收到错误消息。

于 2012-09-25T01:33:17.223 回答