从子级调用父级方法时,从父级调用子级方法

时间:2019-01-10 19:56:27

标签: ruby

有2个Ruby类:

class Parent
  class << self
    def method1
      ...
    end

    def method2
      ...
      method1
      ...
    end
  end
end

class Child < Parent
  class << self
    def method1
      ...
    end

    def method2
      ...
      super
    end
  end
end

Child继承自Parent,并重新定义了其方法method1method2。类Method2的{​​{1}}是通过Parent中相同的方法调用的(使用Child关键字)。我希望从super(即Child)调用时,它将使用Child.method2中的method1。而是使用Child中的method1。这是可以理解但不希望的。

如何解决?

1 个答案:

答案 0 :(得分:1)

所以我用一些看跌期权来运行您的代码:

class Parent
  class << self
    def method1
        puts "parent.method1; self: #{self.inspect}"
    end

    def method2
        puts "parent.method2 before method1 call; self: #{self.inspect}"
        method1
        puts "parent.method2 after method1 call"
    end
  end
end

class Child < Parent
  class << self
    def method1
        puts "child.method1; self: #{self.inspect}"
    end

    def method2
        puts "child.method2 before super; self: #{self.inspect}"
        super
        puts "child.method2 after super"
    end
  end
end


Child.method2

这就是我得到的:

输出

child.method2 before super; self: Child
parent.method2 before method1 call; self: Child
child.method1; self: Child
parent.method2 after method1 call
child.method2 after super

这不是您想要的吗?

Ruby处理方法解析,目标始终是对象的类。在上面的代码中,即使使用super调用,该类仍然是子类。因此,它将调用在子级上定义的任何方法,然后调用父级上定义的任何方法,如果找不到,或者子级调用super ...