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 中文

展开上方的图表