bra*_*boy 3 ruby ruby-on-rails
我有一个位于vendor/plugins文件夹中的模块文件.
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
Run Code Online (Sandbox Code Playgroud)
当我做的时候Greetings.greet("ge"),我把"晚上"作为输出.我想在不改变上述Greetings模块的情况下改变这种行为(显而易见的原因是它是一个外部插件).
我的问题很简单.说我打电话时应该怎么做才能给Greetings.greet("ge")我回复"非常晚上",对于所有其他输入,它应该返回原始模块返回的内容.
我会在config/initializers文件夹中写这个,因为我正在使用Rails.
PS:我已经为课程提出了类似的问题.但我真的想知道模块是如何工作的.
这适用于Ruby 1.8.7和Ruby 1.9.2
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"
Run Code Online (Sandbox Code Playgroud)