클래스 IterationBuffer

클래스 IterationBuffer (IterationBuffer) (raku-type-iterationbuffer)

Iterator 클래스의 구현이 값을 저장하거나 전달할 때 가벼운 방법이 필요하면 IterationBuffer를 써요.

my class IterationBuffer { }

이 클래스는 Scalar 컨테이너를 만들지 않아요. 변형은 BIND-POS 메서드로만, 값 추가는 pushunshift 메서드로만, 두 IterationBuffer 객체를 합치는 건 appendprepend 메서드로만, 그리고 비우는 건 clear 메서드로만 지원해요.

이 객체는 List, Slip, Seq로 강제 변환할 수 있어요.

값은 '있는 그대로' 저장돼요. 그래서 Junction은 그대로 저장되고 자동 스레드(autothread)되지 않아요.

Rakudo 컴파일러 2021.12 릴리스부터는 new 메서드가 선택적 인자로 Iterable을 받아서 그걸로 IterationBuffer를 채울 수도 있어요.

method push

method push(IterationBuffer:D: Mu \value)

주어진 값을 IterationBuffer의 끝에 추가하고, 그 값을 돌려줘요.

method unshift

method unshift(IterationBuffer:D: Mu \value)

주어진 값을 IterationBuffer의 앞에 추가하고, 그 값을 돌려줘요. Rakudo 컴파일러 2021.12 릴리스부터 사용 가능해요.

method append

method append(IterationBuffer:D: IterationBuffer:D $other --> IterationBuffer:D)

다른 IterationBuffer의 내용을 이 IterationBuffer의 끝에 추가하고, 갱신된 invocant를 돌려줘요.

method prepend

method prepend(IterationBuffer:D: IterationBuffer:D $other --> IterationBuffer:D)

다른 IterationBuffer의 내용을 이 IterationBuffer의 앞에 추가하고, 갱신된 invocant를 돌려줘요. Rakudo 컴파일러 2021.12 릴리스부터 사용 가능해요.

method clear

method clear(IterationBuffer:D: --> Nil)

IterationBuffer의 원소 수를 0으로 되돌려서 모든 데이터를 지우고, Nil을 돌려줘요.

method elems

method elems(IterationBuffer:D: --> Int:D)

IterationBuffer의 원소 수를 돌려줘요.

method AT-POS

multi method AT-POS(IterationBuffer:D: int   $pos)
multi method AT-POS(IterationBuffer:D: Int:D $pos)

주어진 위치의 값을 돌려줘요. 위치가 IterationBuffer의 길이를 넘어서면 Mu를 돌려주고, 음수 위치면 인덱스가 범위를 벗어났다는 오류를 던져요.

method BIND-POS

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

주어진 위치에 값을 바인딩하고 그 값을 돌려줘요. 위치가 IterationBuffer의 길이를 넘어서면 자동으로 길이를 늘려요. 음수 위치면 인덱스가 범위를 벗어났다는 오류를 던져요.

method Slip

method Slip(IterationBuffer:D: --> Slip:D)

IterationBufferSlip으로 강제 변환해요.

method List

method List(IterationBuffer:D: --> List:D)

IterationBufferList로 강제 변환해요.

method Seq

method Seq(IterationBuffer:D: --> Seq:D)

IterationBufferSeq로 강제 변환해요.

method raku

method raku(IterationBuffer:D: --> Str)

IterationBufferList 표현으로 만들고, 보통 리스트와 구분되도록 끝에 ".IterationBuffer"를 붙여요. 왕복(roundtrip)은 안 되고, 디버깅용, 특히 dd와 함께 쓸 때만 쓰도록 만들어졌어요.

출처: Raku Docs - IterationBuffer