定义以下隐式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:分类器)由其他方法使用 分类
我知道这会返回一个单元,但是如何实现必要的实现呢?
答案 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
。
由于您要将块分配给变量subclassification
,subclassification
必须是Unit
类型。但是您明确声明类型应该是Subclassification[Classifier]
,因此存在不匹配,并且您会收到错误。