Предположим здесь какой-нибудь произвольный код библиотеки, о котором я не знаю:
class Foo
def hi
end
end
class Bar < Foo
def hi
end
end
И пусть у меня есть код, в котором я передал Bar
в качестве параметра.
def check(x)
do_something_with(x.method(:hi))
end
В приведенном выше примере я могу знать, что x.hi
(где x
ссылается на экземпляр Bar
) отличается от Foo#hi
?
Основываясь на ответе Гарета, это то, что у меня есть до сих пор:
def is_overridden?(method)
name = method.name.to_sym
return false if !method.owner.superclass.method_defined?(name)
method.owner != method.owner.superclass.instance_method(name).owner
end
Отвратительный? Великолепная?