X::Str::Match::x — :x 인자에 잘못된 타입
X::Str::Match::x — :x 인자에 잘못된 타입 (Invalid type for the :x argument)
Str.match나 Str.subst에서 반복 횟수를 지정하는 :x 인자에는 정해진 타입만 받을 수 있어요. 그 규칙을 어긴 타입을 넘기면 어떤 오류가 나올까요? 바로 X::Str::Match::x가 그 역할을 해요.
본문
:x 인자는 반복 횟수를 의미해요. 여기에 허용되는 타입은 Numeric과 Range뿐이에요. 그 외의 잘못된 타입이 들어오면 이 예외가 던져지거나, Failure로 감싸져요.
class X::Str::Match::x is Exception { }
예를 들어 문자열 "foobar"에서 "o"를 반복 횟수 없이 :x<hello>처럼 문자값으로 넘기면 어떤 일이 벌어질까요.
say "foobar".match("o",:x<hello>);
CATCH { default { put .^name, ': ', .Str } };
# OUTPUT: «X::Str::Match::x: in Str.match, got invalid value of type Str for :x, must be Int or Range»
:x는 반복 횟수여야 하므로 Int 같은 숫자여야 하는데, 위 예시는 Str을 넘겨서 오류가 난 모습이에요. 오류 메시지가 꼭 Int나 Range여야 한다고 친절하게 알려주죠.
메서드 got
method got(--> Str:D)
잘못 전달된 인자의 타입 이름을 문자열로 돌려줘요. 위 예시에서는 "Str"이 반환되는 셈이에요.