有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
,并重新定义了其方法method1
和method2
。类Method2
的{{1}}是通过Parent
中相同的方法调用的(使用Child
关键字)。我希望从super
(即Child
)调用时,它将使用Child.method2
中的method1
。而是使用Child
中的method1
。这是可以理解但不希望的。
如何解决?
答案 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 ...