2011-03-01 56 views
1

我在ruby文檔中看到了module_function中的示例。我不理解Mod.one返回舊的「這是一個」的代碼的後半部分,並且c.one返回更新後的「這是新的」。這是如何發生ruby​​文檔中的module_function示例

這是從文檔

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

我打算編輯'callOne'到'call_one',除非你在文檔中注意到它是這樣的。我會在某個階段提交關於此的錯誤報告。 – 2011-03-01 22:39:49

+1

現已修復:http://redmine.ruby-lang.org/issues/4469 – 2011-03-05 21:49:17

回答

4

運行module_function使得功能的副本在模塊級,也就是說,它等同於以下代碼:

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

    def one 
    "This is the new one" 
    end 
end 

Mod.oneone有不同的方法。第一個可以從任何地方調用,第二個在您將該模塊包含在類中時成爲實例方法。

+0

感謝您的解釋。非常清楚 :) – felix 2011-03-01 13:28:35