Raku의 pop — 마지막 요소 꺼내기

Raku의 pop — 마지막 요소 꺼내기

배열의 끝에서 요소 하나를 꺼내서 그 자리에서 제거하고 싶을 때 pop을 써요. "마지막에 넣은 걸 먼저 꺼낸다"는 LIFO 스택의 핵심 동작이기도 하죠. pop은 메서드로도, 독립 루틴으로도 부를 수 있어요.

출처: Raku 공식 문서 — routine pop

독립 루틴 (Independent routines)

multi pop(@a) is raw

Positional 인자의 pop 메서드를 호출합니다. 그 메서드는 모음(collection)의 마지막 요소를 제거하고 돌려주도록 되어 있어요. 모음이 비어 있으면 X::Cannot::Empty를 감싼 Failure를 반환합니다.

Array에서

method pop(Array:D:) is nodal

배열에서 마지막 항목을 제거하고 돌려줍니다. 배열이 비어 있으면 실패(fail)해요.

많은 Array 메서드가 그렇듯 pop도 대응하는 서브루틴으로 호출할 수 있어요. @foo.poppop @foo가 같은 작업을 하죠.

my @foo = <a b>; # a b
@foo.pop;        # b
pop @foo;        # a
pop @foo;
CATCH { default { put .^name, ': ', .Str } };
# OUTPUT: «X::Cannot::Empty: Cannot pop from an empty Array␤»

<a b>에서 b, a를 차례로 꺼내고 나면 배열이 비게 되는데, 거기서 또 pop을 부르니 X::Cannot::Empty 예외가 나와요. 빈 배열에서 꺼내는 건 불가능하다는 뜻이죠.

role Buf에서

method pop()

버퍼의 마지막 요소를 돌려주고 제거합니다.

my $bú = Buf.new( 1, 1, 2, 3, 5 );
say $bú.pop(); # OUTPUT: «5␤»
say $bú.raku;  # OUTPUT: «Buf.new(1,1,2,3)␤»

Buf.new(1,1,2,3,5)에서 마지막 값 5를 꺼내면 버퍼는 Buf.new(1,1,2,3)로 줄어드는 걸 확인할 수 있어요.