X::Str::Match::x — :x 인자에 잘못된 타입

X::Str::Match::x — :x 인자에 잘못된 타입 (Invalid type for the :x argument)

Str.matchStr.subst에서 반복 횟수를 지정하는 :x 인자에는 정해진 타입만 받을 수 있어요. 그 규칙을 어긴 타입을 넘기면 어떤 오류가 나올까요? 바로 X::Str::Match::x가 그 역할을 해요.

출처: Raku Documentation — X::Str::Match::x

본문

:x 인자는 반복 횟수를 의미해요. 여기에 허용되는 타입은 NumericRange뿐이에요. 그 외의 잘못된 타입이 들어오면 이 예외가 던져지거나, 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을 넘겨서 오류가 난 모습이에요. 오류 메시지가 꼭 IntRange여야 한다고 친절하게 알려주죠.

메서드 got

method got(--> Str:D)

잘못 전달된 인자의 타입 이름을 문자열로 돌려줘요. 위 예시에서는 "Str"이 반환되는 셈이에요.

더 알아보기 (Learn more)