2011-10-29 5 views
2

저는 Ruby를 처음 사용 했으므로 나와 함께하시기 바랍니다.블록을 올바르게 사용하는 방법은 무엇입니까?

왜 "test"{| s |가 | print s}? "test"는 어떨까요? | s | 인쇄 끝?

감사합니다.

+0

나중에 참조 할 수 있도록 주어진 오류 메시지를 포함시키는 것이 좋습니다. –

답변

6

이 말할 수 없다 : "test" 리터럴 문자열이 아닌 방법

"test" { |s| print s } 

때문이다. 동일한 내용이 do/end 버전에도 적용됩니다. 당신은 말할 수 :

["test"].each { |s| print s } 

배열은 열거 할하고 열거가 each 방법이 있기 때문에하지만.

+0

사람, 내가 잘못 읽은 것 같습니다 :) +1) – apneadiving

3

{}은 일반적으로 하나의 라이너에 사용됩니다.

여러 줄에 대해 do/end.

하지만 규칙은 없으며 원하는 것을 선택하십시오.

주의 사항 :

당신으로 구분 한 라이너에 몇 가지 지시 사항을 전달해야면 적;

+0

내 대답을 간직하고 초보자에게 유용합니다. – apneadiving

0

블록은 중괄호 또는 키워드로 묶은 코드입니다. do/end. 앞서 언급했듯이 일반적으로 하나의 라이너에는 중괄호를 사용하고 여러 줄의 코드에는 do/end를 사용합니다. 블록은 일부 메소드를 호출 한 직후에만 나타날 수 있습니다. 블록을 익명 메소드 (메소드 이름이없는 메소드)라고 생각할 수 있습니다.

코드에서 메서드 호출이 아닌 문자열 리터럴 바로 뒤에 블록을 배치했습니다. 블록 등, 루프에 사용될 수

위의 코드에서
2.times { puts "hello" } # => 2 
# >> hello 
# >> hello 

는 항상 모든 정수 (즉, 말하자면 그 정수 클래스의 인스턴스 방법)에 속한다 방법이다. times 메서드는 블록의 코드를 두 번 실행하고 호출 한 객체 (이 경우 2)를 반환합니다. 어떤 메소드에 블록을 전달할 수는 있지만, 예상하지 못한 메소드는 블록을 무시할뿐입니다.

블록에 매개 변수를 사용할 수 있습니다. 매개 변수는 파이프 사이에 배치됩니다 ('|'문자). 첫 번째 예가 여기에 표시된 매개 변수를 허용 할 수 있습니다.

2.times { |i| puts i.to_s + " hello" } # => 2 
# >> 0 hello 
# >> 1 hello 

방금 ​​블록의 표면을 긁었습니다. 무료 온라인 블록 Programming Ruby: The Pragmatic Programmer's Guide (PickAx Book)에서 무료로 블록을 읽을 수 있습니다. 지금은 몇 판이지만, Ruby에 대한 소개만으로도 충분합니다. 블록을 이해하면 배열 및 해시에 포함 된 Enumerable의 전원 기능을 사용할 수 있습니다.

관련 문제