我正在学习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(两次)
我对此没有解释,有人可以帮忙吗?
答案 0 :(得分:1)
您没有为您的类(构造函数)定义initialize
方法。您只是在类定义中执行Mod1.sayHello
(甚至在创建实例之前执行它)。尝试评论您的t = TestMod.new
声明。输出仍然可见
由于您包含完全相同的文件,因此最终会执行两次(之后不再包含该文件; ruby会阻止此操作)。该课程应如下所示:
class TestMod
def initialize
Mod1.sayHello
end
end
为什么要包含该文件?这对我没有意义。
编辑:删除了错误。
我建议您使用Mod1
替换模块定义中的Mod2
和self
。这样,如果它改变了一段时间,你就不必在任何地方更改名称。