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 §
ForeignCode
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 the ( )
postcircumfix operator and the .( )
postcircumfix operator. 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, it has to implement Callable.
does Callable my = 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
.