冒号中的冒号

时间:2018-06-15 17:31:47

标签: syntax perl6

冒号can be used as part of a variable name in Perl 6以及尖括号。这些显然称为extended identifiers,用于定义诸如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)

这将在当前范围

中创建具有相同名称的标识符
say MY::.keys; 

打印($=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.

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

  1. 这些键值对&#34;真实&#34;还是仅仅是完全不同的意外影响?
  2. 如果是,您可以定义其他值吗?为什么不是其他&#34;键&#34;包括在那套?
  3. 是否有任何面向用户的方式来获得所有&#34;角度&#34;为特定扩展标识符定义的键?例如,一种获取所有infix变量的方法?

2 个答案:

答案 0 :(得分:6)

  

因此,这些克隆变量正在创建一个键值对。

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

my $foo = 3;
say kv $foo # (0 3)

答案 1 :(得分:6)

当您在列表上调用.kv时,您会得到一个索引列表,每个索引后跟相关值。

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

基本上这些是相同的:

$foo:bar.kv
$foo:bar.list.kv