X::Method::InvalidQualifier
X::Method::InvalidQualifier
메서드를 호출할 때 $invocant.TheClass::method처럼 클래스 이름을 한정자(qualifier)로 붙여서 호출할 수 있어요. 그런데 호출 대상인 $invocant이 그 TheClass에 해당하지 않으면 문제가 생기죠. 바로 그때 X::Method::InvalidQualifier 예외가 던져집니다.
본문
X::Method::InvalidQualifier는 Exception을 상속하는 예외예요. $invocant이 TheClass를 따르지(conform) 않는데도 $invocant.TheClass::method 형태로 호출을 시도하면 발생해요.
예를 들어 정수 1은 Str이 아니기 때문에, Str 클래스 이름을 붙여 split을 호출하면 이 예외가 나와요.
1.Str::split(/a/);
CATCH { default { put .^name, ': ', .Str } };
# OUTPUT: «X::Method::InvalidQualifier: Cannot dispatch to method split on Str because it is not inherited or done by Int»
메서드
method method
method method(--> Str:D)
한정자가 붙지 않은 원래 메서드의 이름을 돌려줘요. 위 예시에서는 split이 되겠죠.
method invocant
실패한 한정자 메서드 호출의 invocant(호출 대상)을 돌려줘요.
method qualifier-type
메서드 호출이 한정된 타입, 즉 TheClass:: 부분의 타입을 돌려줘요.