3
method_missing이 정의 된 클래스를 알고 싶습니다. Object에 정의되어 있습니다.루비. 어떤 클래스 인스턴스 메소드가 정의되어 있는지 어떻게 알 수 있습니까?
계층 구조의 어떤 클래스가이를 재정의하는지 어떻게 알 수 있습니까?
당신은 방법이 구현되는 위치 확인UnboundMethod#owner
방법을 사용할 수 있습니다
method_missing이 정의 된 클래스를 알고 싶습니다. Object에 정의되어 있습니다.루비. 어떤 클래스 인스턴스 메소드가 정의되어 있는지 어떻게 알 수 있습니까?
계층 구조의 어떤 클래스가이를 재정의하는지 어떻게 알 수 있습니까?
당신은 방법이 구현되는 위치 확인UnboundMethod#owner
방법을 사용할 수 있습니다
: owner
이 모듈을 반환, 방법은 (나중에 어딘가 클래스 계층 구조로 혼합) 모듈에 구현 된 경우 :
class A
def method_missing(*args)
# do something
end
end
method = A.instance_method(:method_missing)
method.owner
# => A
주 .
@ ZhangKaiYu 도움이 되었습니까? –
좋은 답변입니다. 내가 틀렸다고 정정 하긴하지만,'#'을 반환하는'method'로 멈출 수 있다고 생각합니다 (단지 디버깅을위한 것으로 가정하고 코드 자체에 반환 된 클래스는 필요 없습니다). –
아니요, 'A.method (: method_missing)'은'A # method_missing' 대신'BasicObject # method_missing'을 나타내는'Method' 인스턴스를 반환합니다. 왜냐하면'A # method_missing'이 클래스 메소드가 아닌 인스턴스 메소드로 구현 되었기 때문입니다. –