role Callable { ... }

支持调用自身对象的的角色。它用于 BlockRoutineSubMethodSubmethodMacro 类型。

可调用对象可以存储在以 & 为标记的容器中,此类容器的默认类型约束为 Callable

my &a = {;}# Empty block needs a semicolon 
my &b = -> {};
my &c = sub () {};
sub foo() {};
my &d = &foo;

方法§

方法 CALL-ME§

method CALL-ME(Callable:D $self: |arguments)

此方法对于 ( ) 后缀运算符.( ) 后缀运算符 是必需的。它使对象真正可调用,需要重载以使给定对象的行为像例程一样。如果需要将对象存储在以 & 为标记的容器中,则必须实现 Callable。

class A does Callable {
    submethod CALL-ME(|c){ 'called' }
}
my &a = A;
say a(); # OUTPUT: «called␤»

应用 Callable 角色不是使对象可调用的要求;如果某个类只是想在常规标量容器中添加类似子例程的语义,则可以使用子方法 CALL-ME

class A {
    has @.values;
    submethod CALL-ME(Int $x where 0 <= * < @!values.elems{
        @!values[$x]
    }
}
my $a = A.new: values => [4,5,6,7];
say $a(2); # OUTPUT: «6␤»

方法 Capture§

method Capture()

抛出 X::Cannot::Capture

类型图§

Callable 的类型关系
raku-type-graph Callable Callable Mu Mu Any Any Any->Mu Code Code Code->Callable Code->Any ForeignCode ForeignCode ForeignCode->Callable ForeignCode->Any WhateverCode WhateverCode WhateverCode->Code Block Block Block->Code Routine Routine Routine->Block Macro Macro Macro->Routine Sub Sub Sub->Routine Method Method Method->Routine Submethod Submethod Submethod->Routine Regex Regex Regex->Method

展开上方的图表