Ruby 大家觉得这种给 method 新加 feature 实现方式怎么样?

nxbtch · 2015年11月24日 · 最后由 rebornix 回复于 2015年11月24日 · 53481 次阅读

假设在 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 来保存原有的方法,额,的确有点奇怪了,不过我觉得挺有意思的,肯定不推荐大家使用这种方法实现,如果有更好的方法的,希望能多指教!

为啥不推荐,这比环绕别名要好

五万阅读量神贴。。

首页的精华帖们 几乎都不超过一万个访问量 这个好神奇...

不过刷新一次就增加一个访问量 看看就行了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号