X::Method::Private::Permission — 프라이빗 메서드 호출 권한 오류
X::Method::Private::Permission — 프라이빗 메서드 호출 권한 오류 (Calling a private method without permission)
프라이빗(private) 메서드는 자신의 클래스 안에서만 호출할 수 있어요. 그런데 현재 클래스에 정의되지 않은 프라이빗 메서드를 호출하거나, 그 호출을 허락해주는 trust 관계가 없을 때는 어떻게 될까요? Raku는 컴파일 시점에 이를 오류로 잡아내요.
본문
코드에 현재 클래스에 정의되지 않은 프라이빗 메서드 호출이 있으면서, 그 호출을 허용하는 trust 관계도 없으면 컴파일 시점 오류가 발생해요.
class X::Method::Private::Permission does X::Comp { }
예를 들어 Int 객체에 !Int::foo처럼 프라이빗 메서드를 호출하면,
1!Int::foo
이런 메시지와 함께 실패해요.
===SORRY!===
Cannot call private method 'foo' on package Int because it does not trust GLOBAL
프라이빗 메서드는 ! 다음에 나타나요. 그런데 Int는 그 프라이빗 메서드를 가진 패키지도 아니고, GLOBAL을 trust하지 않아서 호출이 거부된 거예요.
메서드 method
method method(--> Str:D)
호출하려던 프라이빗 메서드의 이름을 돌려줘요.
메서드 source-package
method source-package(--> Mu:D)
(해당 메서드를 담고 있을 것이라고 추정되는) 타입 객체를 돌려줘요.
메서드 calling-package
method calling-package(--> Mu:D)
호출하는 코드가 있는 패키지를 돌려줘요. 이 패키지는 source-package가 trust하지 않는 대상이에요.