X::Method::InvalidQualifier

X::Method::InvalidQualifier

메서드를 호출할 때 $invocant.TheClass::method처럼 클래스 이름을 한정자(qualifier)로 붙여서 호출할 수 있어요. 그런데 호출 대상인 $invocant이 그 TheClass에 해당하지 않으면 문제가 생기죠. 바로 그때 X::Method::InvalidQualifier 예외가 던져집니다.

출처: Raku 공식 문서 — X::Method::InvalidQualifier

본문

X::Method::InvalidQualifierException을 상속하는 예외예요. $invocantTheClass를 따르지(conform) 않는데도 $invocant.TheClass::method 형태로 호출을 시도하면 발생해요.

예를 들어 정수 1Str이 아니기 때문에, 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:: 부분의 타입을 돌려줘요.