class ForeignCode
Rakudo-specific class that wraps around code in other languages (generally NQP)
1 | Methods |
1.1 | method arity |
1.2 | method count |
1.3 | method signature |
1.4 | method name |
1.5 | method gist |
1.6 | method Str |
2 | Type Graph |
3 | Routines supplied by role Callable |
3.1 | (Callable) method CALL-ME |
3.2 | (Callable) method Capture |
does Callable
ForeignCode
is a Raku wrapper around code that is not written originally in that language; its intention is to use these blocks of code in Callable
contexts easily. For instance, subs have some anonymous functions that are actually ForeignCode
.
sub does-nothing();say .name ~ ' → ' ~ .^name for .^methods;# OUTPUT: «<anon> → ForeignCode<anon> → ForeignCodesoft → Method…»
This script will map method names to their class, and it shows that routines, in particular, have several methods that are actually ForeignCode
instead of Method
s.
Methods
method arity
method arity()
Returns the arity of the enclosed code.
method count
method count()
Returns the number of arguments the enclosed code needs.
method signature
method signature( ForeignCode: )
Returns the signature of the enclosed code.
method name
method name()
Returns the name of the enclosed code, or <anon>
if it has not received any.
method gist
method gist( ForeignCode: )
Returns the name of the code by calling name
.
method Str
method Str( ForeignCode: )
Returns the name of the code by calling name
.
Type Graph
Routines supplied by role Callable
ForeignCode does role Callable, which provides the following routines:
(Callable) method CALL-ME
method CALL-ME(Callable : |arguments)
This method is required for postfix:«( )» and postfix:«.( )». It's what makes an object actually call-able and needs to be overloaded to let a given object act like a routine. If the object needs to be stored in a &
-sigiled container, is has to implement Callable.
does Callablemy = A;say a(); # OUTPUT: «called»
Applying the Callable
role is not a requirement to make an object callable; if a class simply wants to add subroutine-like semantics in a regular scalar container, the submethod CALL-ME
can be used for that.
my = A.new: values => [4,5,6,7]say (2); # OUTPUT: «6»
(Callable) method Capture
Defined as:
method Capture()
Throws X::Cannot::Capture
.