假设在 A 类中有一个方法 hehe
class A
def hehe
"hehe"
end
end
现在需要重新向 hehe 这个方法中添加一些功能,通常的做法是使用 alias_method
class A
alias_method :old_hehe, hehe
def hehe
p old_hehe
"new feature"
end
end
然而今天脑洞大开,发现 Class#instance_method 返回的是一个叫做 UnboundMethod 的对象,具体大家可以查文档,所以我就想是不是可以用这种方法来代替上面的写法:
class A
@@old_hehe = instance_method(:hehe)
def hehe
p @@old_hehe.bind(self).call
"new feature"
end
end
使用 class variable 来保存原有的方法,额,的确有点奇怪了,不过我觉得挺有意思的,肯定不推荐大家使用这种方法实现,如果有更好的方法的,希望能多指教!