Scala隐式def抱怨成员defs的返回类型?

时间:2012-09-25 01:30:54

标签: scala

定义以下隐式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:分类器,b:分类器)和isSubclass(a:   分类器,b:分类器)由其他方法使用   分类

我知道这会返回一个单元,但是如何实现必要的实现呢?

1 个答案:

答案 0 :(得分: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说整个块类型为Unit

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