Raku의 BIND-POS — 위치 첨자의 값에 바인딩

Raku의 BIND-POS — 위치 첨자의 값에 바인딩

배열처럼 위치(positional)로 접근하는 구조에서, 첨자 자리에 값을 바인딩하고 싶을 때가 있어요. @numbers[5] := $x처럼 바인딩 연산자(:=)를 쓸 때 내부적으로 호출되는 메서드가 BIND-POS예요. IterationBuffer에서는 해당 인덱스 위치에 값을 바인딩하고 그 값을 돌려줘요.

multi method BIND-POS(IterationBuffer:D: int   $pos, Mu \value)
multi method BIND-POS(IterationBuffer:D: Int:D $pos, Mu \value)

본문 — IterationBuffer

multi method BIND-POS (::?CLASS:D: $index, \new)

BIND-POS$index 위치에 값(또는 컨테이버) new를 바인딩하고, 그 자리에 자연스럽게 놓여 있던 컨테이너를 교체할 것을 기대해요. 코드로는 이렇게 써요.

my $x = 10;
@numbers[5] := $x;

IterationBufferBIND-POS는 주어진 위치에 값을 바인딩하고 반환해요. 주어진 위치가 현재 버퍼 길이를 넘어서면 버퍼가 자동으로 늘어나요. 음수 위치 값은 인덱스가 범위를 벗어났다는 오류를 던져요.

일반 Array 클래스는 이 메서드를 지원해서 복잡한 연결형(linked) 데이터 구조를 만들 수 있어요. 다만 도메인 특화 타입이라면 이 동작이 의미가 없을 수 있으니 구현을 강요받지 않아도 되고, 구현하지 않으면 사용자가 객체의 위치 자리에 바인딩을 시도할 때 적절한 오류 메시지를 받아요.

출처: Raku 공식 문서 — BIND-POS