可能重复:
When monkey patching a method, can you call the overridden method from the new implementation?
所以我希望通过覆盖它来简单地向方法添加一些条件检查,但是我希望调用原始方法。如何在红宝石中做到这一点?
即
方法存在
def fakeMethod(cmd)
puts "#{cmd}"
end
我要添加
if (cmd) == "bla"
puts "caught cmd"
else
fakeMethod(cmd)
end
有什么想法吗?
答案 0 :(得分:8)
alias :old_fake_method :fake_method
def fake_method(cmd)
if (cmd) == "bla"
puts "caught cmd"
else
old_fake_method(cmd)
end
end
答案 1 :(得分:1)
为什么不使用继承。这是一个经典的例子,重写的方法增加了额外的逻辑:
class Foo
def foo(cmd)
puts cmd
end
end
class Bar < Foo
def foo(cmd)
if cmd == "hello"
puts "They want to say hello!"
else
super
end
end
end
Foo.new.foo("bar") # => prints "bar"
Bar.new.foo("hello") # => prints "They want to say hello"
当然,只有在您有机会实例化子类实例时,此解决方案才有效。
答案 2 :(得分:0)
ruby中有alias_method_chain和alias _方法。
(alias_method_chain不在ruby中,但在ActiveSupport :: CoreExtensions中,所以如果这不是rails应用程序,你需要要求它)