정의되지 않은 일부 메서드 (예 : Foo)가`method_missing`에 의해 캡처되지 않는 이유는 무엇입니까?

괜찮아

다음 정의로 정의되지 않은 메서드를 캡처하려고했습니다.

def method_missing m
  puts "#{m} is missing"
end

다음과 같이 정의되지 않은 메서드를 작성하면 foo다음 과 같이 캡처됩니다 method_missing.

foo # => foo is missing

그러나와 같은 정의되지 않은 메서드를 작성할 때 다음으로 Foo캡처되지 않습니다 method_missing.

Foo # => NameError: Uninitialized constant Foo

상수에서 명확 해지면 캡처되는 것처럼 보입니다.

self.Foo # => Foo is missing
Foo() # => Foo is missing

Foo첫 번째 경우에 캡처되지 않습니까? 메서드가 지역 변수 사이에 모호 할 때으로 캡처 method_missing되지만 상수 사이에 모호 할 때가 아닌 기능입니까? 그렇다면 이에 대한 문서가 있습니까? 아니면 버그입니까?

문제는 이것이 실제로 모호하지 않고 직관적이지 않다는 것입니다. Ruby의 문법에서 대문자로 시작하고 인수 목록이 뒤 따르지 않는 식별자는 항상 상수 조회로 구문 분석됩니다.

와 같은 메서드를 정의한 경우에도 동일한 오류가 발생 def Foo "You won't see this" end합니다. 이 발생하면 Foo, 그것은 여전히 상수를 찾기 위해 노력할 것이다 Foo그 이름으로 정수를이 발견되지되었을 때 나가서 설명하자면 NameError를 던져. 대문자로 시작하는 메소드를 호출하려면 명시 적 수신자 (예 :) self.Foo또는 인수 목록 (빈 항목 만있는 경우)을 포함해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관