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

lhy20062008 · February 28, 2015 · Last by seiran replied at March 12, 2015 · 2729 hits

问题描述:有两个类 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.

同意 #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
You need to Sign in before reply, if you don't have an account, please Sign up first.