在 Raku 中:当我使用 CALL-ME 方法创建对象时,当
< ... >
是 Str 时,我想使用 ( '...' )
语法作为签名而不是 ...
。
在文档中,有一个创建运算符的示例,它是具有特殊语法的普通 Raku sub。这种 sub 会自动将 < ... >
转换为 Str。
例如,如果我有
use v6.d;
class A {
has %.x;
method CALL-ME( Str:D $key ) { say %!x{ $key } }
}
my A $q .= new( :x( <one two three> Z=> 1..* ) );
$q('two');
$q<two>;
但这会产生
2
Type A does not support associative indexing.
in block <unit> at test.raku line 10
基于@raiph评论的答案:
AT-KEY
方法。
您可以直接这样做:
class A {
has %.x;
method CALL-ME( Str:D $key ) { say %!x{ $key } }
method AT-KEY($key) { self.($key) }
}
或者您可以通过使用
AT-KEY
特征将 %!x
委托给
handles
来实现:
class A {
has %.x handles <AT-KEY>;
method CALL-ME( Str:D $key ) { say %!x{ $key } }
}