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