2013-06-13 98 views
0

隨着Scala中的泛型廣大的支持,什麼是實現以下的循環參數範圍,其中CCommand[A, C]本身就是一亞型的最佳方式(即UserCommandSystemCommand)?引用亞型性狀內斯卡拉

注意:我忽略了C的較低/較高類型邊界 - 正如問題所暗示的,我不確定如何以編譯的方式表示此內容,或者如果我在Scala中缺少專門用於解決問題的功能這類循環問題。

trait CommandPrerequisite[-A, +C] { 
    val command: C 
    def isValid(aggregate: A): Boolean 
} 

trait Command[A, C] { 
    def prerequisites: List[CommandPrerequisite[A, C]] 
} 

trait SystemCommand extends Command[System, SystemCommand] { 
    // System specific definitions. 
} 

trait UserCommand extends Command[User, UserCommand] { 
    // User specific definitions. 
} 

回答

3

你可能想F-界多態性。您需要更改的是trait Command的簽名:

trait Command[A, C <: Command[A, C]] {