模块的方法范围和内部类的扩展

时间:2018-05-08 12:30:51

标签: ruby class object

我运行了这个脚本:

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

2 个答案:

答案 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。由于CLogicObject的实例,CLogic.execute可以调用。