ForeignCode — 다른 언어(NQP 등) 코드를 감싸는 Rakudo 전용 클래스
ForeignCode — 다른 언어(NQP 등) 코드를 감싸는 Rakudo 전용 클래스
Raku로 작성된 코드가 아니지만 Callable(호출 가능) 문맥에서 쓰고 싶은 코드가 있어요. 이를테면 루틴을 뜯어보면 이름 없는 함수 중 일부가 사실 Raku가 아닌 다른 언어(주로 NQP)로 작성된 게 나와요. 그런 코드를 Raku에서 감싸서 쓰기 쉽게 해주는 클래스가 ForeignCode예요.
본문
class ForeignCode does Callable {}
ForeignCode는 원래 Raku로 작성되지 않은 코드를 감싸는 래퍼예요. 그런 코드 블록들을 Callable 문맥에서 쉽게 쓰려는 목적이에요. 예를 들어 sub에는 실제로는 ForeignCode인 이름 없는 함수들이 일부 있어요.
sub does-nothing(){};
say $_.name ~ ' → ' ~ $_.^name for &does-nothing.^methods;
# OUTPUT: «<anon> → ForeignCode<anon> → ForeignCodesoft → Method…»
이 스크립트는 메서드 이름을 그 클래스에 매핑해 보여줘요. 루틴에는 특히 Method가 아니라 실제로 ForeignCode인 메서드가 여러 개 있다는 걸 보여주죠.
method arity
method arity()
감싸진 코드의 arity(인자 개수)를 반환해요.
method count
method count()
감싸진 코드가 필요로 하는 인자의 수를 반환해요.
method signature
method signature( ForeignCode:D: )
감싸진 코드의 시그니처를 반환해요.
method name
method name()
감싸진 코드의 이름을 반환해요. 이름이 없다면 <anon>을 반환해요.
method gist
method gist( ForeignCode:D: )
name을 호출해 코드의 이름을 반환해요.
method Str
method Str( ForeignCode:D: )
name을 호출해 코드의 이름을 반환해요.