在角色 Callable 中§

有关方法 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␤»

在角色 Enumeration 中§

有关方法 CALL-ME 的主要文档,请参阅上下文

multi method CALL-ME(|)

给定一个枚举值,返回一个 Enumeration 实例。

enum Mass ( mg => 1/1000=> 1/1kg => 1000/1 );
say Mass(1/1000); # OUTPUT: mg