Сам вводят наследование в scala

Скажите, что у меня есть следующие черты:

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
Как ожидалось, если я некомментирую сам аннотация типа, компилятор счастлив.

Я думаю, что довольно очевидно, почему C также нужно это сам тип. Что я не понимаю, почему это не может "наследовать" его от, если компилятор мог бы уже выяснить, что это необходимо?

Я думаю, что это могло уменьшить многословие, когда Вы используете сам типы со сложными иерархиями, особенно если Вы смешиваетесь в большом наборе черт, каждом из них имеющий его собственное сам тип.

Я предполагаю, вероятно, существует серьезное основание для текущего поведения, я просто не мог найти/выяснить, каково это.

Сначала я думал, что это могло бы быть связано со смешиванием линеаризации, но это кажется мне, это не играет здесь (даже если у меня было больше черт, смешанных в с более сложным сам типы).

Это вызвало бы неоднозначности в некоторых случаях? Если так, почему это не может работать, когда нет никакой неоднозначности?

Или это связано с некоторыми трудностями при надлежащей реализации его?

Я мог найти некоторые дискуссии о теме (как сам, тип не наследован), но они главным образом просто заявляют проблему и приходят к заключению, что это - то, как это без слишком большого объяснения и/или решения (если это существует).

9
задан Sandor Murakozi 6 August 2010 в 07:16
поделиться

1 ответ

trait C extends B with A

- не единственное решение. У вас также может быть

trait AA extends A
trait C extends B with AA

, то есть все, что наследует интерфейс A , принимается. Если вы должны полагаться на конкретную реализацию, вы должны выбрать миксин; если реализация зависит от пользователя или у вас есть веская причина не указывать миксин в трейте (например, чтобы ослабить проблемы с зависимостями), вы должны сделать его самотипом.

1
ответ дан 5 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: