Positional 타입

Positional 타입 (raku-type-positional)

인덱스로 값을 찾아낼 수 있는 객체들을 위한 역할(role)이에요. 보통 리스트처럼 생긴 객체들이 이 역할을 구현해요. List, Array, Range, Buf 같은 타입이 대표적이죠.

출처: Raku Docs - Positional

정의

role Positional[::T = Mu] { ... }

[ ] 후치 연산자로 인덱싱할 수 있는 객체를 위한 역할이에요. @array[0]처럼 대괄호로 접근하는 그 동작이 바로 이 역할이 약속하는 기능이죠.

메서드

method of

method of()

포지셔널 컨테이너 요소의 타입 제약을 돌려줘요. 위 정의에서 T가 바로 그건데, 보다시피 기본값은 Mu예요. 타입 객체로 돌려받아요.

my @a;
say @a.of.^name;   # OUTPUT: «Mu␤»
my Str @b;
say @b.of.raku;   # OUTPUT: «Str␤»
say (my int @).of; # OUTPUT: «(int)␤»

이 역할을 섞는 클래스가 제공해야 하는 메서드들

이 역할을 구현하는 클래스는 다음 메서드들을 직접 제공해야 해요.

method elems

method elems()

인스턴스화된 객체 안에 있는 요소의 개수를 돌려줘야 해요.

method AT-POS

method AT-POS(\position)

주어진 위치의 값(혹은 컨테이너)을 돌려줘야 해요. @a[$i]를 평가할 때 불리는 메서드예요.

method EXISTS-POS

method EXISTS-POS(\position)

주어진 위치에 실제로 값이 있는지 나타내는 Bool을 돌려줘야 해요. @a[$i]:exists 같은 검사가 써요.

method STORE

method STORE(\values, :$INITIALIZE)

이 메서드는 아래 문법을 지원하고 싶을 때만 제공하면 돼요.

my @a is Foo = 1,2,3;

is Foo로 역할 구현을 바인딩한 배열에 값을 넣는 그 문법이죠. 객체를 (재)초기화할 값들을 받아야 해요. 선택적 이름 인자 :$INITIALIZE는 메서드가 처음 호출될 때 True를 담아요. 그리고 invocant를 돌려줘야 해요.

참고: 포지셔널 서브스크립팅을 위해 구현할 수 있는 추가 메서드들에 대해서는 Methods to implement for positional subscripting 문서를 보세요.