Разница заключается в том, что первый пример определяет модуль метод называется preview
, а второй пример определяет метод Mixinpreview
.
Чтобы включить первый класс в класс, вы сможете вызвать этот метод в классе (тогда как вызов метода в экземпляре класса приведет к ошибке), включая включение второго модуля в класс позволит вызвать метод для экземпляров класса, но вызов метода на классе сам вызовет
NoMethodError: undefined method preview for Foo:Class
Что касается конфликтов основываясь на том же имени метода в классе и модуль включен в него. Ответ на этот вопрос лежит в методе Ruby, поиске, который является следующим:
- Метода из одноплодных/меты/собственного класса объекта
- Метода из предваряются модулей (Ruby 2.0+ функция)
- методы из объекта, класс
- Методы из включенных модулей
- методы из иерархии классов (суперкласса и его предков)
Me при поиске метода останавливается поиск.
С prepend
метод mixin будет иметь приоритет в поиске метода;
Метод include
, определенный в классе, имеет приоритет в поиске методов.
Таким образом, никаких конфликтов не существует.
Я знаю метод класса и экземпляра, просто хотел убедиться, что он ничего не меняет в том, как работает пространство имен. – xotix
это только вопрос вашего намерения относительно использования метода - будет ли он использоваться в классе или на его экземплярах. –
технически это не метод класса, а метод экземпляра одноэлементного класса. –