У меня есть два класса. Я хочу их пропустить. У меня также есть немного функциональности, которую они разделяют. Я делаю что-то вроде этого:Включить модуль в класс в модуле
module Talker
def say_bye
puts 'bye'
end
class Bob
include Talker
def say_yo
puts 'yo'
end
end
class Tom
include Talker
def say_hello
puts 'hello'
end
end
end
Это все действительные вызовы методов.
Talker::Bob.new.say_yo
Talker::Bob.new.say_bye
Talker::Tom.new.say_hello
Talker::Tom.new.say_bye
мне сказали: «Это include
будет включать Bob
снова следует закрыть Talker
модуль перед началом класса, который включает в себя Talker
.» Может кто-нибудь объяснить мне, если я делаю что-то, что приводит к неожиданному рубиновому поведению или считается табу? Неплохо ли включать такой модуль изнутри внутри этого модуля? Что может быть критикой за эту модель? Должен ли я использовать наследование здесь?
Вы уверены, что 'Bob.new.say_yo' и т. Д. Действительны (из основной среды)? – sawa
Ваш пример не вызывает ошибки, которые вы получаете – mdesantis
Отредактировано: Call не работает, потому что у меня не было пространства имен перед классами. Вопрос не в том, «почему это не работает» или «почему это ошибка»? Он работает и без ошибок. Вопросы в том, что если A) это нормально? И Б) это что-то плохое, я не знаю, что за кулисами? –