2012-09-25 60 views
0

定義了下面的隱式def,用於實現Akka actor事件總線所需的一些方法。 http://doc.akka.io/docs/akka/2.0/scala/event-bus.html#Subchannel_ClassificationScala implicit def抱怨返回類型與成員defs?

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] is an object providing isEqual(a: Classifier, b: Classifier) and isSubclass(a: Classifier, b: Classifier) to be consumed by the other methods of this classifier.

所需的方法的文檔在這裏概述

我知道這將返回一個單元,但我將如何使必要的實現也可以提供這些成員方法?

回答

3

您是不是要實例化一個Subclassification[Classifier]的子類?如果是這樣,你需要說new Subclassification[Classifier],以便斯卡拉知道你在做什麼。

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],因此存在不匹配情況,並且出現錯誤。

+0

顯然是這樣,絕對是我的誤解。謝謝。我也會注意到它需要'爲未來的搜索者導入akka.util.Subclassification'; – crockpotveggies

+0

並感謝編輯的概念理解:) – crockpotveggies