这是 How to determine the class a method was defined in? 的后续问题(希望您不介意相似性)
给定一个类层次结构,一个方法可以检索它自己的 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
这样 B.new.foo
就会打印
# B#foo: `I am #<Method: B#foo>'
# A#foo: `I am #<Method: A#foo>' # <- this is what I want
在上一个问题中,Jörg W Mittag suspected检索定义方法的类可能违反面向对象的范例。这也适用于此吗?
方法不应该“了解自己”吗?
最佳答案
我找到了一个 method正是这样做的。
class A
def foo
puts "A#foo: `I am #{method(__method__).super_method || method(__method__)}'"
end
end
我真的很佩服 Matz 和 Ruby 核心开发人员。这种方法的存在意味着他们已经想到了这种情况,并且已经考虑了如何处理它。
关于ruby - 从 Ruby 中的方法中检索方法实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34745608/