Я думаю, что это, вероятно, связано с тем, что в Scala, а не с тем, что было предложено в оригинальной бумаге .
Я когда-то тоже думал об этом вопросе, за исключением различий в реализации, я пришел к выводу, что черты в Scala действительно оставляют желать лучшего. То, как Scala позволяет создавать, но не исключать методы, странно. Чтобы избежать конфликтов, он заимствовал то, что называется порядок разрешения метода (или линеаризация на языке Scala) на других языках. Существует проблема, хорошо известная для языков, которые поддерживают множественное наследование, и я смело классифицирую Scala как члена этой группы. Проблема в том, что это слишком сложно и требует много времени для понимания.
Порядок разрешения методов в Scala - странный зверь, у него есть собственный алгоритм отправки методов. Это не C3 Дилана, который используется в Python, с некоторыми заметными проблемами , но имеет все проблемы, связанные с ним. Хуже того, я могу посмотреть MRO объекта Python, вызвав его метод .mro()
. В Scala нет эквивалента.
Я могу вам сказать, что мне не очень нравится запускать алгоритм Scala MRO в моей голове каждый раз, когда мне нужно посмотреть, где будет разрешен метод.