【发布时间】:2018-06-15 17:31:46
【问题描述】:
冒号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)。所以这些 冒号 变量正在创建一个键值对。但是,其他两个“键”(2 和 baz)不包含在该键值对集中。如果我们真的尝试做say $foo:bar{'0'} 或say $foo:bar<0>; 我们会得到不同的错误,所以似乎没有一种实际的方法可以将其用作真正的密钥。所以我想这里至少有几个问题:
- 这些键值对是“真实的”,还是完全不同事物的意外影响?
- 如果是,您能否定义其他值?为什么该集合中不包含其他“键”?
- 是否有任何面向用户的方式来获取为特定扩展标识符定义的所有“倾斜”键?比如获取所有
infix变量的方法?
【问题讨论】: