2011-03-12 6 views
37

루비의 인트로 스펙 션 관련 메소드가 객체가 메소드에 응답하는지 검사하는 이유가 궁금합니다. responds_to? 대신 respond_to?왜 Ruby는 respond_to를 사용합니까? responds_to 대신에?

객관적으로 respondsToSelector을 사용했기 때문에 항상 어색해 보였습니다.

+1

어쩌면 그것은 필수적이 되려고 노력하고 있습니다. 이봐, 당신이 반대합니다. – julkiewicz

+0

나는이 질문이 전에 물어 보지 못했다고 믿을 수 없다! –

답변

66

마츠 prefers초 사람 단수 또는 세 번째 사람 복수 : "responds_to"

아마도 보다 더 많은 사람들이 영어로 말하는 느낌이 "respond_to?"보다 많을 것입니다.

아마도. 하지만 나는 일본인이야. 루비는 영어가 아닙니다. 표준 이름 지정 규칙 에서 제 3 자 단수형을 피하기위한 기본 명명 규칙입니다.

you = Human.new 
    if you.respond_to?(:knock) 
    ... 
    end 
+1

나는 Matz가 2 인칭의 단수 또는 3 인의 복수형을 선호하지 않는다고 믿는다. 그러나 그는 동사의 기본형 (to-less infinitive) 형태를 선호한다. – sawa

+0

@sawa "사전 형식"(사전 형의 올바른 용어 인 경우)과 같은 일본어 동사? –

+0

예. 그러나 일본어에는 사람 수에 대한 합의가 없으므로 일본어에는 차이가 없습니다. 일반적으로 終止 形 (종결 모양)이라고합니다. – sawa

7

어떻게 수신기가 세 번째 사람이 단수 항상 있음을 알 수 있습니까? 수신기가 I, we, you 또는 they이거나 복수형을 나타내는 것이 가능합니다. 이 경우 여전히 responds_to?respond_to?보다 자연스러운 것이라고 말할 수 있습니까? 보편성을 유지하기 위해 가능한 한 일반적인 형식으로 메서드를 명명하는 것이 좋습니다. 제 3 자 단수의 메서드를 명명하는 대신 기본값 인 에서까지 사전 이름으로 사용하는 것이 더 바람직합니다.이 형식은 사전에도 사용됩니다.

+1

나는 항상 수신기를 '그것'이라고 생각한다. – nroose