2014-11-14 2 views
1

누군가 다음 코드를 이해하는 데 도움을 줄 수 있습니까?누군가가 respond_to를 설명 할 수 있습니까? :마다?

array = [1,2,3,4]; 
if array.respond_to? :each 
    puts "1234" 
else 
    puts "5678" 
end 

나는 코드의 결과를 이해할 수 있지만, :each의 구문은 무엇인가?

글로벌 방법은 :each입니까? 왜 우리는 이것을 이렇게 쓸 수 있습니까? 또는 그것에 대해 어떻게 알 수 있습니까?

답변

7

:eachString과 비슷하지만 동등한 비교가 더 효율적입니다. Symbol입니다. 아니요 메서드입니다. 그것은 이름 일 수 있습니다.

respond_to?은 거의 모든 Ruby 객체가 궁극적으로 상속하는 Object에 정의 된 메소드입니다.

[1, 2, 3, 4].each라고 말하면 :each 메시지는 Array 개체 [1, 2, 3, 4]으로 전송됩니다. Array 클래스 개체는 해당 인스턴스에서 이러한 메시지를받을 때 수행 할 작업을 알 수 있으므로 Array.respond_to?(:each)을 반환하고 true을 반환합니다. 기본적으로 array.respond_to?(:each)false 인 경우 array.each은 오류를 발생시킵니다. [주석에 p11y 메모가있는 경우 array이 실제로 Array 인 경우 항상 true을 반환합니다. 그러나 프로그래머는 거짓말을 할 수 있으며 arrayArray 일 필요는 없습니다. 예 : array = "not an Array, fooled you!"]

[1, 2, 3, 4].respond_to? :each[1, 2, 3, 4].respond_to?(:each)과 같습니다.

한 줄에 여러 문장을 채우고 싶다면 루비에서만 세미콜론이 필요합니다. C에서와 달리, 예를 들어, 세미콜론이 문 자 종료 자 인 경우, 루비에서는 구문 구분 기호입니다. 따라서 array = [1, 2, 3, 4];을 쓰는 것은 나쁜 스타일입니다.

+3

+1 당신은 훨씬 더 잘 설명했습니다. 부가 메모 : 변수'array'는 배열과 다른 무언가를 포함 할 수 있기 때문에 실제 이름이 잘못되었습니다. –

+0

감사합니다. 좋은 지적입니다. – Amadan

+0

톤 감사합니다! 기분이 훨씬 나아졌습니다 ~! : D도, 나는 우리가 문자열을 정의하는 경우 : – wiwengweng

관련 문제