Raku의 ASSIGN-POS — 배열 위치에 직접 값 넣기
Raku의 ASSIGN-POS — 배열 위치에 직접 값 넣기
@numbers[5] = "five"처럼 배열의 특정 위치에 값을 대입할 때, Raku는 내부적으로 메서드를 호출해요. ASSIGN-POS는 그 대입을 더 가볍게 만들고 싶을 때 직접 구현하는 선택형 최적화예요. ASSIGN-KEY(해시용)의 위치 기반 버전이라고 보면 돼요.
multi method ASSIGN-POS(::?CLASS:D: $index, $new)
$index 위치의 요소를 $new 값으로 설정해야 해요. 이 메서드를 구현하지 않으면 Raku는 self.AT-POS($index) = $new를 대신 사용해요. 구현한다면 반드시 같은 효과를 내야 해요.
이 메서드는 '선택형 성능 최적화'예요. @numbers[5] = "five"처럼 단순한 대입은 AT-POS를 호출하지 않고 동작할 수 있어요. AT-POS는 만들고 돌려주는 데 비용이 들 수 있는 컨테이너 객체를 생성해야 하기 때문이에요.
ASSIGN-KEY와 마찬가지로, ASSIGN-POS를 구현했다고 해서 AT-POS를 rw 메서드로 만들지 않아도 되는 건 아니에요. @numbers[5]++처럼 덜 단순한 대입·수정은 여전히 AT-POS를 사용하니까요.
본문
$index위치의 요소를$new로 설정하는 역할이에요.- 구현하지 않으면
self.AT-POS($index) = $new로 대체되고, 구현하면 같은 효과를 보장해야 해요. - 단순한 위치 대입이 비싼 컨테이너 객체를 만들지 않도록 돕는 선택형 최적화예요.
AT-POS를rw로 만드는 일은 여전히 필수예요.++같은 수정 연산은AT-POS를 거치니까요.