ruby文档中的module_function示例

时间:2011-03-01 11:07:35

标签: ruby ruby-1.9.1

我在ruby文档中看到了module_function中的示例。我不明白代码的后半部分,其中Mod.one返回旧的“this is one”,而c.one返回更新的“这是新的”。这是怎么发生的?

这是文档中的实际代码

 module Mod
   def one
     "This is one"
   end
   module_function :one
 end

 class Cls
   include Mod
   def call_one
     one
   end
 end

 Mod.one     #=> "This is one"
 c = Cls.new
 c.call_one  #=> "This is one"

 module Mod
   def one
     "This is the new one"
   end
 end

 Mod.one     #=> "This is one"
 c.call_one   #=> "This is the new one"

为什么Mod.one返回旧代码但Cls对象能够访问新代码? 感谢。

1 个答案:

答案 0 :(得分:5)

运行module_function在模块级别复制一个函数,也就是说,它等同于以下代码:

module Mod
  def Mod.one
    "This is one"
  end

  def one
    "This is the new one"
  end
end

Mod.oneone是不同的方法。第一个可以从任何地方调用,第二个在模块中包含模块时成为实例方法。