所以我最近才开始编写一些 Ruby,虽然我了解模块的工作原理,但以下行为仍然让我失望。
module ModuleA
def a_greet
'Hello from module A'
end
end
module ModuleB
def b_greet
'Hello from module B'
end
end
include ModuleA
include ModuleB
# WHY DOES THIS WORK !!!!!
p ModuleA.b_greet
我知道可以在不指定 Module.
的情况下调用模块中的函数,而且我永远不会以这种方式编写代码,但我不明白为什么你可以调用 ModuleB 中包含的方法当明确说明 ModuleA 时?
最佳答案
等等,还有更多:
"Why does this work?".b_greet # => "Hello from module B"
您将这些模块包含在顶级对象 main
中。它是一个特殊的对象:在它上面定义的所有方法对所有对象都可用(参见上面的行,String
上现在有 b_greet
方法)。 ModuleA
也是一个对象,因此,当您包含 ModuleB
时,ModuleA
会获取其方法。如果您将这些模块包含在常规类/对象中,您将不会获得这种“共享”行为。
关于ruby - 了解 Ruby 模块行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15040858/