2011-05-04 51 views
3

我有一個位於vendor/plugins文件夾中的模塊文件。如何在Ruby/Rails中重新打開模塊

module Greetings 
    def self.greet(message) 
     return "good morning" if message=="gm" 
     return "evening" if message=="ge" 
     return "good afternoon" if message=="ga" 
    end 
end 

當我做一個Greetings.greet("ge"),我得到的「黃昏」作爲輸出。我想在不更改上述Greetings模塊的情況下更改此行爲(顯而易見的原因是它是一個外部插件)。

這裏我的問題很簡單。當我打電話給Greetings.greet("ge")時,我該怎麼辦,應該給我「非常好的一個晚上」,對於所有其他輸入,它應該返回原始模塊返回的內容。

而我會寫這裏面的config/initializers文件夾,因爲我使用的是Rails。

PS:我已經爲類提出了similar question。但我真的想知道它是如何工作的模塊。

回答

7

這在Ruby中1.8.7和1.9.2的Ruby

module Greetings 
    def self.greet(message) 
     return "good morning" if message=="gm" 
     return "evening" if message=="ge" 
     return "good afternoon" if message=="ga" 
    end 
end 

p Greetings.greet("ge") # => "evening" 

module Greetings 
    class << self 
    alias_method :old_greet, :greet 

    def greet(message) 
     return self.old_greet(message) unless message == "ge" 
     return "A Very Good Evening" 
    end 
    end 
end 

p Greetings.greet("ge") # => "A Very Good Evening" 
p Greetings.greet("gm") # => "good morning" 
+0

完美對我的作品!非常感謝你這樣一個簡潔的答案! – bragboy 2011-05-04 18:56:40