我注意到了类定义,如果我打开class MyClass
,并在中间添加一些内容而不覆盖,我仍然得到之前定义的原始方法。新增的声明增加了现有声明。
但是对于方法定义,我仍然希望与类定义具有相同的行为,但是当我打开def my_method
,def
和{{1}中的现有语句时,似乎被覆盖了,我需要再次重写。
那么有没有办法让方法定义与定义相同,比如end
,但不一定是子类?
答案 0 :(得分:9)
我想你正在寻找alias_method:
class A
alias_method :old_func, :func
def func
old_func # similar to calling 'super'
# do other stuff
end
end
答案 1 :(得分:0)
@emboss,如果你不想在old_func之后执行代码,如果它包含条件返回怎么办?你可以在Rails中看到它类似 before_action 。 例如:
class MyClass
alias_method :old_func, :func
def aloha
puts 'Something'
return smth if other_thing
puts 'End of method'
end
def func
aloha # Don't call :old_func if aloha return condition is true
old_func
end
end
MyClass.new.func # Should return <smth> from aloha method.
这意味着语句应该逐行在同一个上下文中执行。