我运行了这个脚本:
module Ma
class CLogic; end
def execute
"Module Ma executes."
end
end
include Ma
CLogic.execute # => "Module Ma executes."
执行Ma#execute
。我期待像Undefined method 'execute' for class A.
这样的东西。我想了解原因。由于CLogic
?
include
答案 0 :(得分:3)
在顶级包含一个模块使其实例方法可用于所有对象,而不仅仅是CLogic
:
include Ma
123.execute #=> "Module Ma executes."
:foo.execute #=> "Module Ma executes."
Array.execute #=> "Module Ma executes."
CLogic.execute #=> "Module Ma executes."
它基本上就像:
class Object
include Ma
end
答案 1 :(得分:2)
您定义了Ma#execute
,它包含在主环境中。这将定义带入Object
。由于CLogic
是Object
的实例,CLogic.execute
可以调用。