Ruby Ruby 可以跳本类的方法执行父类的同名方法吗?

lhy20062008 · 2015年02月28日 · 最后由 seiran 回复于 2015年03月12日 · 2728 次阅读

问题描述:有两个类 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 的实现,能做到吗?

A.new.method(:a).super_method.call

X-Y problem.

同意 #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
需要 登录 后方可回复, 如果你还没有账号请 注册新账号