如何强制method_2调用A :: method_1?
class A
def method_1
puts "A"
end
def method_2
method_1 #call A::method_1 only if this is instance of A
end
end
class B < A
def method_1
puts "B"
end
end
B.new.method_2
在通常的实现中,method_1被覆盖。有没有办法调用A的覆盖方法?
答案 0 :(得分:1)
虽然这是一个奇怪的问题,但您仍然可以使用此代码完全按照您的要求实现:
class A
def method_1
puts "A"
end
def method_2
A.instance_method(:method_1).bind(self).call
end
end
class B < A
def method_1
puts "B"
end
end
puts B.new.method_2
# => A
由于您有B
的实例,method_1
会被覆盖。但您可以通过A#method_1
直接指向A.instance_method
。
instance_method
会返回UnboundMethod
,这意味着它没有self
的引用。因此,您需要将其与.bind(self)
绑定。
然后使用.call
调用方法。