Это наблюдение вопрос How to determine the class a method was defined in? (надеюсь, вы не возражаете сходство)Получение экземпляра метода внутри метода в Ruby,
Учитывая иерархию классов, может метод извлечения собственной 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, что получение класс метод был определен в может привести к нарушению объектно-ориентированные парадигмы. Означает ли это и здесь?
Не должен ли метод «знать себя»?
Возможно, чит будет каким-то образом сделать эту интернированную строку, а затем вызвать ее один раз из исходного местоположения. – sawa
@sawa печать экземпляра метода не является точкой, хотя замороженная строка, вероятно, может работать в этом случае ;-) – Stefan