我有两节课。我想命名它们。我还有一些他们共享的功能。我做这样的事情:
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
模块。”有人可以解释一下,如果我做的事情会导致意外的红宝石行为或者被认为是禁忌吗?在该模块中的类中包含这样的模块是不好的做法吗?对这种模式可能有什么批评?我应该在这里使用继承吗?
答案 0 :(得分:0)
我明白了。包含最终有点递归。上面的代码将执行以下操作:
Talker::Bob::Bob
Talker::Bob::Tom
Talker::Bob::Bob::Bob::Tom::Bob::Tom
这不是什么东西。所以当他说它会将模块中的其他类重新包含到包含该模块的每个类中时,他是对的。