2013-06-13 3 views
0

С огромной поддержкой воспроизведенных в Scala, что это лучший способ достижения следующих циклические оценок параметров, где C в Command[A, C] является подтипом самого по себе (то есть UserCommand или SystemCommand)?Реферирование подтипа внутри признака в Scala

Примечание: Я не указал ограничения нижнего/верхнего типа для 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

Вы, вероятно, хотите ф-ограниченная полиморфизм. Все, что вам нужно изменить, это подпись trait Command:

trait Command[A, C <: Command[A, C]] { 
Смежные вопросы