在模块中的类中包含模块

时间:2014-09-29 18:44:53

标签: ruby recursion namespaces include

我有两节课。我想命名它们。我还有一些他们共享的功能。我做这样的事情:

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模块。”有人可以解释一下,如果我做的事情会导致意外的红宝石行为或者被认为是禁忌吗?在该模块中的类中包含这样的模块是不好的做法吗?对这种模式可能有什么批评?我应该在这里使用继承吗?

1 个答案:

答案 0 :(得分:0)

我明白了。包含最终有点递归。上面的代码将执行以下操作:

Talker::Bob::Bob
Talker::Bob::Tom
Talker::Bob::Bob::Bob::Tom::Bob::Tom

这不是什么东西。所以当他说它会将模块中的其他类重新包含到包含该模块的每个类中时,他是对的。