Rails 如何覆盖类已经存在的方法?

chucai · 2013年01月06日 · 最后由 doitian 回复于 2013年01月06日 · 3941 次阅读

假设我有两个 module A 和 B

module A
   include B
   def a
      # some code
       b
   end
end

module B
  def b
     #method b code...
   end
end

现在,我想动态修改 module A 的 a 方法,有什么好的办法么? 我有一个不好的方案。打一个"猴子补丁"

module A
  def a
    #method a code
    b
  end 

  def b
    #method b code 
  end
end

有更优美的解决方案么?

没看明白..

def a
  ... # 静态的逻辑
  yield
  ... # 静态的逻辑
end
a{ 动态的逻辑 }
A.send :alias_method, :old_a, :a # or A.send :undef_method, :a
A.send :define_method, :a, proc {p "d"}

传说中的 X-Y question 吗?

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