2016-05-24 129 views
0

我創建了一個斯卡拉的活動特點,它看起來像下面的缺位:斯卡拉泛型:表示類型

trait Event[A] 
{ 
    def addListener(f: A=>Unit): Unit 
    def rmvListener(f: A=>Unit): Unit 
} 

它可以作爲預期爲各類A,但有一個例外:Event[Unit]要求回調根據需要鍵入(Unit)=>Unit而不是()=>Unit。同樣,Event[Nothing]要求回調的類型爲(Nothing)=>Unit。我試過擴展Event[]但它不能編譯。我希望避免寫event.addListener((Unit)=>{ /*logic*/ }的需要。

可能最簡單的解決方案是編寫第二個特徵Actionf:()=>Unit,但我希望避免重複事件系統邏輯。

有沒有人知道在Scala中使用泛型時表示缺少類型的好方法?

回答

1

有沒有人知道在Scala中使用泛型時表示缺少類型的好方法?

沒有一個。但是

我希望避免需要寫event.addListener((Unit)=>{ /*logic*/ }

你不需要;你會寫event.addListener { _ => /*logic*/ }event.addListener { case() => /*logic*/ }(注意,在第二種情況下,需要{}而不是())。

可能最簡單的解決方法是用f:()=> Unit編寫第二個trait Action,但我希望避免重複事件系統邏輯。

你可以把它寫像

trait Action extends Event[Unit] { 
    // calls Event.addListener 
    def addListener(f:() => Unit) = addListener(_ => f()) 
}