redo — 루프의 같은 반복을 다시 실행하기

redo — 루프의 같은 반복을 다시 실행하기

next가 다음 반복으로 넘어가고, last가 루프를 끝내는 것처럼, Raku의 루프 제어에는 현재 반복을 그대로 다시 실행하는 수단도 있어요. 그게 바로 redo인데, 레이블(label)과 함께 쓰면 대상 루프를 명확히 지정할 수 있죠.

출처: Raku 공식 문서 — redo

본문

In Label

method redo(Label:)

redo는 레이블에 연결된 루프의 같은 반복을 다시 실행해요. next처럼 다음 반복으로 건너뛰는 게 아니라, 지금의 반복을 처음부터 다시 도는 거예요. 아래 예시를 보면 동작이 바로 와닿을 거예요.

my $has-repeated = False;

MY-LABEL:
for 1..10 {
    print "$_ ";
    if $_ == 5 {
        LEAVE $has-repeated = True;
        redo MY-LABEL unless $has-repeated;
    }
}

# OUTPUT: «1 2 3 4 5 5 6 7 8 9 10 »

$_이 5가 되는 순간, redo MY-LABEL로 같은 반복을 다시 시작해요. 첫 번째는 $has-repeated이 아직 False라서 다시 돌지만, LEAVE로 플래그가 True가 된 뒤에는 다시 반복하지 않고 넘어가요. 그래서 출력에 5가 두 번 나오는 걸 볼 수 있어요.