Я строю класс, состоящий из нескольких признаков, одна из которых предоставляет возможность включить список «членов» класса:
trait WithNestedMembers[T] {
val members = new scala.collection.mutable.ListBuffer[T]
}
class MainClass extends WithNestedMembers[MainClass] {
// ...
}
Кажется, это работает нормально.
Теперь я бы хотел использовать возможность «вложения» в других чертах:
trait NestingUser {
this: WithNestedMembers[NestingUser] =>
var nestedValue = 0
def sumNested = nestedValue + members.map(_.nestedValue).sum
}
Определение, кажется, работает само по себе. Однако я не могу использовать это как часть MainClass
. Следующее дает ошибку:
class MainClass extends WithNestedMembers[MainClass] with NestingUser {
// Illegal inheritance, self-type MainClass does not conform to WithNestedMembers[NestingUser]
}
Я подозреваю, что мне нужно где-то использовать какие-то границы типов, чтобы объяснить, что WithNestedMembers[MainClass]
достаточно для требования WithNestedMembers[NestingUser]
. Но где?