在Ruby中包含相同的模块文件?

时间:2010-09-15 17:42:49

标签: ruby

我正在学习ruby以及模块和mixins ..

我尝试了以下代码。 ruby文件test.rb的名称。

module Mod1
  def Mod1.sayHello()
    puts "Hello Mod1"
  end

end

module Mod2
  def Mod2.sayHello()
    puts "Hello Mod2"
  end
end


class TestMod
  require 'file'
  Mod1.sayHello
end

t = TestMod.new

我对输出感到惊讶: 你好Mod1 你好Mod1(两次)

我对此没有解释,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您没有为您的类(构造函数)定义initialize方法。您只是在类定义中执行Mod1.sayHello(甚至在创建实例之前执行它)。尝试评论您的t = TestMod.new声明。输出仍然可见 由于您包含完全相同的文件,因此最终会执行两次(之后不再包含该文件; ruby​​会阻止此操作)。该课程应如下所示:

class TestMod
  def initialize
    Mod1.sayHello
  end
end

为什么要包含该文件?这对我没有意义。

编辑:删除了错误。

我建议您使用Mod1替换模块定义中的Mod2self。这样,如果它改变了一段时间,你就不必在任何地方更改名称。