여기 예제의 경우와 같이 블록을 메서드에 전달할 때 블록을 사용하는 방법과 방법을 결정하는 방법이 다릅니다. 메소드의 설명서 및/또는 소스 코드를 읽으면 블록에 필요한 매개 변수 (있는 경우)를 이해해야합니다.
의 경우 개체가 준비되어 create_table
메서드 자체에서 전달됩니다. rake
과 관련 작업은이 시점에서 아무 관련이 없으며 실행 메커니즘으로 만 사용됩니다.
그것은, 루비 블록 0 회 이상 호출 할 수 있다는 것을 명심하는 것이 중요합니다 즉시 또는 미래에서 중. 즉, 블록이 즉시 호출되는지, 나중에 호출되는지, 호출되지 않을지, 호출되지 않을지, 호출되는 횟수를 확신 할 수 없습니다. 당신이 가질 수있는 유일한 기대는 블록을 보내는 방법에 의해 결정됩니다.
yield
을 사용하여 블록을 실행하지 않으므로 아무 것도 일어나지 않을 곳에 원하는 블록을 전달할 수 있습니다.
비슷한 구조의 언어를 사용하지 않는 한 블록이 처음에는 다소 혼란 스러울 수 있습니다. 자바 스크립트 프로그래머는 function
객체를 전달하는 것에 익숙 할 것입니다.이 객체는 기본적으로 여기서 모두 수행합니다.하지만 Ruby 용어에서는 암시 적 인수로 전송되는 Proc입니다.
create_table('model_names', function(t) {
t.string('name');
t.string('address');
t.timestamps();
});
같은 철자 당신이 단순히 기능에 보내는 명백하고, 그것을 실행하기 create_table
기능에 달려있다 : 같은 더 자바 스크립트 맛 예에서
,이 보일 것이다. 루비는 블록이 즉시 실행되는 것처럼 보일 수도 있지만 블록을 선언하는 데는
do ... end
과
begin ... end
사이에 큰 차이가 있습니다.