冒号中的冒号

jjm*_*elo 6 syntax perl6

冒号可以用作Perl 6中变量名的一部分,以及尖括号.这些显然被称为扩展标识符,用于定义诸如infix:<+>.

my $foo:bar = 3;
my $foo:bar<2> = 2;
my $foo:bar<baz> = 'quux';
say $foo:bar; # 3
say $foo:bar<2>; # 2 (and so on)
Run Code Online (Sandbox Code Playgroud)

这将在当前范围中创建具有相同名称的标识符

say MY::.keys; 
Run Code Online (Sandbox Code Playgroud)

打印 ($=pod $_ $/ $buz !UNIT_MARKER $=finish EXPORT $foo:bar<2> $foo:bar<baz> $! ::?PACKAGE GLOBALish $bur::quux $¢ $foo:bar $?PACKAGE

但这就是事情.

say $foo:bar.kv; # prints key-value pairs.
Run Code Online (Sandbox Code Playgroud)

打印(0 3).所以这些冒号变量正在创建一个键值对.但是,其他两个"键"(2baz)不包括在该组键值对中.如果我们真的尝试say $foo:bar{'0'}或者say $foo:bar<0>;我们将获得不同的错误,那么似乎没有一种实际的方法将其用作真正的密钥.所以我想这里至少有几个问题:

  1. 这些键值对是"真实的",还是仅仅是完全不同的意外影响?
  2. 如果是,您能定义其他值吗?为什么不包含其他"键"?
  3. 是否有任何面向用户的方法来获取为特定扩展标识符定义的所有"角度"键?例如,获取所有infix变量的方法?

rai*_*iph 6

所以这些克隆变量正在创建一个键值对.

不,.kv(或kv)正在生成键值对:

my $foo = 3;
say kv $foo # (0 3)
Run Code Online (Sandbox Code Playgroud)


Bra*_*ert 6

当您调用.kv列表时,您将获得一个索引列表,每个索引后跟相关值.

当您在其上调用listy方法时,每个奇异值都将被视为包含一个值的列表.


基本上这些是相同的:

$foo:bar.kv
$foo:bar.list.kv
Run Code Online (Sandbox Code Playgroud)