X::Cannot::Empty — 빈 컬렉션 부적절 사용 예외

X::Cannot::Empty — 빈 컬렉션 부적절 사용 예외

빈 컬렉션을 부적절하게 사용했을 때 발생하는 오류로, 보통 Failure에 감싸져 전달돼요.

예를 들어, 다음 스택 구현은 빈 스택에서 값을 pop하려 할 때 실패해요. sink 컨텍스트에서는 반환된 Failure가 곧바로 던져지죠.

class Stack {
    my class Node {
        has $.value;
        has Node $.next;
    }
    has Node $!next;

    method push($value) {
        $!next .= new(:$value, :$!next);
        self;
    }

    method pop() {
        fail X::Cannot::Empty.new(:action<pop>, :what(self.^name))
         unless $!next;

        my $value = $!next.value;
        $!next .= next;
        $value;
    }
}

my $stack = Stack.new.push(42);
say $stack.pop; # OUTPUT: «42␤»
try $stack.pop;
say $!.message; # OUTPUT: «Cannot pop from an empty Stack␤»

pop 메서드는 스택이 비어 있을 때 failX::Cannot::Empty를 만들고, 이때 어떤 동작(action)을 하려 했고 어떤 타입(what)의 대상이었는지를 담아요.

출처: Raku Documentation — X::Cannot::Empty

본문

method action

method action()

부적절했던 동작에 대한 문장 설명 을 반환해요.

method what

method what()

그 동작의 대상이었던 타입 을 반환해요.