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 메서드는 스택이 비어 있을 때 fail로 X::Cannot::Empty를 만들고, 이때 어떤 동작(action)을 하려 했고 어떤 타입(what)의 대상이었는지를 담아요.
본문
method action
method action()
부적절했던 동작에 대한 문장 설명 을 반환해요.
method what
method what()
그 동작의 대상이었던 타입 을 반환해요.