Мац якобы сказал «Примеси может делать почти все, что множественное наследование сделать, без сопутствующих недостатков» (Мац слов).»Каким образом включение модуля Ruby не является «множественным наследованием» и как стиль Ruby позволяет избежать проблем, связанных с множественным наследованием?
Прежде всего, почему включение модуля рубин не« множественное наследование? Мне кажется, там очень мало различий между модулями и классами. Тот факт, что вы не можете создать экземпляр модуля, не имеет значения, когда он используется в качестве суперкласса.
Я также знаю, что последовательное включение модуля образует единую цепочку наследования (не дерево), простирающуюся вверх от класс, но этого для меня недостаточно, чтобы отличить его от «множественного наследования», поскольку система множественного наследования Python также «линеаризует» цепь суперкласса (используя C3 algorithm) это просто, что процесс линеаризации Ruby значительно проще.
Итак, что именно отличает модули Ruby от смешанного наследования в языке, таком как Python? И почему аргументы, лежащие в основе внедрения Python алгоритма C3 MRO, применимы к Ruby? И если они применимы - почему Руби решил не применять этот алгоритм?
благодаря
Вот хорошая статья по этому вопросу, посмотрите, отвечает ли он на ваш вопрос: http://www.artima.com/weblogs/viewpost.jsp?thread=246488 –
@Mladen это абсолютно блестяще .... если вы добавите его в качестве правильного ответа, я приму 'it :) – horseyguy