这是一个后续问题如何确定方法是在哪个类中定义的? https://stackoverflow.com/q/34742181/477037(希望你不要介意相似之处)
给定一个类层次结构,一个方法可以检索自己的方法吗?Method
实例?
class A
def foo
puts "A#foo: `I am #{method(__method__)}'"
end
end
class B < A
def foo
puts "B#foo: `I am #{method(__method__)}'"
super
end
end
A.new.foo
# A#foo: `I am #<Method: A#foo>'
B.new.foo
# B#foo: `I am #<Method: B#foo>'
# A#foo: `I am #<Method: B#foo>' # <- A#foo retrieves B#foo
So that B.new.foo
相反打印
# B#foo: `I am #<Method: B#foo>'
# A#foo: `I am #<Method: A#foo>' # <- this is what I want
在上一个问题中,约尔格·W·米塔格疑似 https://stackoverflow.com/a/34743386/477037检索定义方法的类可能会违反面向对象的范例。这也适用于此吗?
方法不应该“认识自己”吗?
我找到了一个method http://ruby-doc.org/core-2.3.0/Method.html#method-i-super_method正是这样做的。
class A
def foo
puts "A#foo: `I am #{method(__method__).super_method || method(__method__)}'"
end
end
我真的很佩服 Matz 和 Ruby 核心开发人员。有这样的手段存在,就说明他们已经想到了这样的情况,并且已经考虑过如何应对。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)