Являются ли модули == mixins в ruby?

99
10

Я читал во многих учебниках, что


В Ruby класс может быть только подклассом одного класса. Тем не менее, миксины позволяют классам без общего предка делиться методами.


На практике, когда мне нужно реализовать множественное наследование. Я использую Modules, а не mixins. например:


Module name_goes_here
def method_name_goes_here
.....
end
end

Затем я просто включаю их в класс


class MySubClass < MySuperClass
include module_name
end

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


так, Вопрос:
Являются ли модули == mixins в ruby? если да, то почему. если нет, то какая разница?


PS: извините, если его глупый вопрос

спросил(а) 2012-06-11T16:35:00+04:00 8 лет, 4 месяца назад
1
Решение
149

Mixins - это концепция языка, которая позволяет вставлять некоторый код в класс.


Это реализовано в Ruby по ключевому слову include, которое принимает параметр Module как параметр.

Итак, в Ruby, mixins реализованы с модулями. Но модули имеют другое применение, чем mixins.


Например, модули также могут использоваться для namespacing ваших классов или инкапсуляции функций утилиты, чтобы не загрязнять глобальное пространство имен.

ответил(а) 2012-06-11T16:39:00+04:00 8 лет, 4 месяца назад
100

Из статьи в википедии


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


Итак, модули в Ruby предоставляют возможность повторного использования функций без создания самих модулей. Я бы сказал: "mixins in ruby ​​реализованы с помощью модулей", но не "mixins - это модули и наоборот".

ответил(а) 2012-06-11T16:38:00+04:00 8 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема