首页 > 解决方案 > 模块方法的范围和内部类的扩展

问题描述

我运行了这个脚本:

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?

标签: rubyclassobject

解决方案


在顶层包含一个模块使其实例方法可用于所有对象,而不仅仅是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

推荐阅读