내가 약을 모르는 어떤 임의의 라이브러리 코드입니다. 위의 예에서 메서드가 재정의되었음을 감지 할 수 있습니까?</p> <pre><code>class Foo def hi end end class Bar < Foo def hi end end </code></pre> <p>그리고 내가 매개 변수로 <code>Bar</code>을 통과하고있어 일부 코드가 있다고 가정 : 여기에 가정
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
무시 무시한? 화려한?
관련성이있는 것은 아니지만, 왜 이렇게하고 싶은지 궁금합니다. –
또한 동일한 클래스의 기존 메서드를 재정의하는 것과는 상속 관계를 "오버라이드"하는 것에 만 관심이있는 것으로 보입니까? –