【问题标题】:Colons in variables变量中的冒号
【发布时间】: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&lt;2&gt; $foo:bar&lt;baz&gt; $! ::?PACKAGE GLOBALish $bur::quux $¢ $foo:bar $?PACKAGE

但事情就是这样。

say $foo:bar.kv; # prints key-value pairs.

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

  1. 这些键值对是“真实的”,还是完全不同事物的意外影响?
  2. 如果是,您能否定义其他值?为什么该集合中不包含其他“键”?
  3. 是否有任何面向用户的方式来获取为特定扩展标识符定义的所有“倾斜”键?比如获取所有infix变量的方法?

【问题讨论】:

    标签: syntax raku


    【解决方案1】:

    所以这些冒号的变量正在创建一个键值对。

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

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

    【讨论】:

      【解决方案2】:

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

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


      基本上这些是一样的:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-28
        • 2016-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多