如何获取对象方法上的 `< ... >` 语法?

问题描述 投票:0回答:1

在 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
object raku calling-convention
1个回答
0
投票

基于@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 } }
}
© www.soinside.com 2019 - 2024. All rights reserved.