Скажем, у меня есть следующие черты:
trait A
trait B { this: A => }
trait C extends B // { this: A => }
Ошибка компилятора: illegal inheritance; self-type C does not conform to B's selftype B with A
Как и ожидалось, если я раскомментирую аннотацию собственного типа, компилятор будет счастлив.
Iдумаю, совершенно очевидно, почему С также нужен этот тип.Что я не понимаю, почему он не может «наследовать» его от A, если компилятор уже может выяснить, что ему нужно?
Я думаю, что это может уменьшить многословие, когда вы используете собственные типы со сложными иерархиями, особенно если вы смешиваете в большой набор характеристик, каждая из которых имеет свой собственный тип.
Я думаю,вероятно, есть веская причина для текущего поведения, я просто не мог найти / выяснить, что это такое.
Сначала я подумал, что это может быть связано с линеаризацией миксина, но мне кажется, что она здесь не играет (даже если бы у меня было больше черт, смешанных с более сложными типами себя).
Может ли это вызвать неясности в некоторых случаях?Если так, то почему это не может работать, когда нет двусмысленности?
Или это связано с некоторыми трудностями в правильной реализации этого?
Я мог бы найти некоторые обсуждения по теме (например, self-тип не наследуется ), но в основном они просто излагают проблему и приходят к выводу, что так оно и есть без особых объяснений и / или решения (если оно существует).