ForeignCode — 다른 언어(NQP 등) 코드를 감싸는 Rakudo 전용 클래스

ForeignCode — 다른 언어(NQP 등) 코드를 감싸는 Rakudo 전용 클래스

Raku로 작성된 코드가 아니지만 Callable(호출 가능) 문맥에서 쓰고 싶은 코드가 있어요. 이를테면 루틴을 뜯어보면 이름 없는 함수 중 일부가 사실 Raku가 아닌 다른 언어(주로 NQP)로 작성된 게 나와요. 그런 코드를 Raku에서 감싸서 쓰기 쉽게 해주는 클래스가 ForeignCode예요.

출처: Raku Documentation — ForeignCode

본문

class ForeignCode does Callable {}

ForeignCode는 원래 Raku로 작성되지 않은 코드를 감싸는 래퍼예요. 그런 코드 블록들을 Callable 문맥에서 쉽게 쓰려는 목적이에요. 예를 들어 sub에는 실제로는 ForeignCode인 이름 없는 함수들이 일부 있어요.

sub does-nothing(){};
say $_.name ~ ' → ' ~ $_.^name for &does-nothing.^methods;
# OUTPUT: «<anon> → ForeignCode␤<anon> → ForeignCode␤soft → 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을 호출해 코드의 이름을 반환해요.

출처: Raku Documentation — ForeignCode