X::Signature::Placeholder

X::Signature::Placeholder

Raku에서는 블록에 시그니처(signature)를 명시적으로 쓸 수도 있고, $^x처럼 자리 표시자(placeholder) 변수를 써서 블록을 만들 수도 있어요. 그런데 둘을 한 블록에 동시에 쓰면 모순이 생기죠. 그때 컴파일 타임 오류로 던져지는 예외가 X::Signature::Placeholder예요.

출처: Raku 공식 문서 — X::Signature::Placeholder

본문

블록이 명시적 시그니처와 자리 표시자 매개 변수(placeholder parameter)를 둘 다 가질 때 이 컴파일 타임 오류가 발생해요. X::Signature::PlaceholderX::Comp 역할을 하는 예외예요.

예를 들어 다음 코드는 이미 () 시그니처가 있는데 $^x라는 자리 표시자를 쓰고 있어서 문제가 돼요.

sub f() { $^x }

이 코드는 다음 메시지와 함께 실패해요.

===SORRY!===
Placeholder variable '$^x' cannot override existing signature

자리 표시자는 시그니처가 없는 블록에서만 쓸 수 있다는 점을 기억해 두면 좋아요. 명시적 시그니처가 있다면 그걸 따라가고, 없다면 자리 표시자로 매개 변수를 정의하는 거죠.

메서드

method placeholder

method placeholder(--> Str:D)

이미 시그니처가 있는 블록에서 쓰인 자리 표시자의 이름을 돌려줘요. 위 예시에서는 $^x가 되겠죠.