问题描述:有两个类 A,B,A 是 B 的子类,两个类中都有方法 a,A 的实例如何直接调用 B 中的 a 方法?
class B def a 'b' end end class A < B def a 'a' end end
A.new.a => a 我想让 A.new.a 返回 b,但又不改变 A 中 a 的实现,能做到吗?
super 关键字
A.new.method(:a).super_method.call
X-Y problem.
其实我感觉楼主需要的是 alias_method
alias_method
http://ruby-doc.org//core-2.2.0/Module.html#alias_method-method http://blog.bigbinary.com/2012/01/08/alias-vs-alias-method.html
同意 #2 楼 @iBachue 但是 super_method 是 Ruby 2.2 新添加的方法 Ruby 2.2 以下使用 alias_method 来曲线救国的。
比如这样:
class B def a 'b' end end class A < B alias_method :super_a, :a def a 'a' end end A.new.super_a #=> b A.new.a #=> a
学习了 super_method 方法 另外复习了别名的方法
直线救国的话:
class B def a 'b' end end class A < B def a #do some stuff super end end
因为有可能是在别的地方这么弄一下的话:
obj = A.new B.instance_method(:a).bind(obj).call