【问题标题】:How to push onto a hash key of array?如何推入数组的哈希键?
【发布时间】:2019-07-03 03:31:33
【问题描述】:

我正在尝试在 Perl6 中推入一个数组的散列。

perl5 的等价物是:

my %c;
@{ $c{'USA'} } = qw(Seattle Madison Bozeman Portland);
push @{ $c{'USA'} }, 'Philadelphia';

但这在 Perl6 中:

my %c;
%c<USA> = 'Seattle', 'Madison', 'Bozeman', 'Portland';
%c{'USA'}.append: 'Philadelphia';

给出这个错误

不能在不可变的“列表”上调用“附加”

Perl6 的 push 出现类似错误,考虑到 https://docs.perl6.org/routine/push 的示例显示 %h&lt;a&gt;.push(1); 尝试 %c&lt;USA&gt;.push('Philadelphia') 也失败了,这似乎没问题

我在这里做错了什么?我在搜索引擎结果中没有看到此错误

【问题讨论】:

    标签: raku


    【解决方案1】:
    my %c;
    %c<USA> = ['Seattle', 'Madison', 'Bozeman', 'Portland'];
    %c{'USA'}.append: 'Philadelphia';
    

    括号是Array,而不是List

    链接到解释差异的Lists, sequences, and arrays 文档,主要是 List 是不可变的,而 Array 不是。

    【讨论】:

    • 顺便说一句,您可以使用 来引用 Perl 5 qw() 之类的词。
    • 所以你可以写%c&lt;USA&gt; = &lt;Seattle Madison Bozeman Portland&gt;;。所以没有逗号或引号。你也可以写%c&lt;USA&gt;.append: 'Philadelphia';(或%c&lt;USA&gt;.append: &lt;Philadelphia&gt;;)。
    • @raiph,仍然需要方括号才能创建数组。幸运的是,方括号和尖括号完美组合:my %c; %c&lt;USA&gt; = [&lt;Seattle Madison Bozeman Portland&gt;]; %c&lt;USA&gt;.append: 'Philadelphia';。顺便说一句,对于单个元素,您可以 .push 代替,您甚至可以将一对推入散列以在其中创建或扩展数组:%c.push((USA =&gt; "Philadelphia"))。请注意双括号,使其成为位置 Pair 参数而不是命名参数。
    • 呃。谢谢@timotimo。 (我确实知道这些东西,但我故意弄错了,所以你会写一个很棒的后续评论。>。>)尽管如此,仍然可以写%c&lt;USA&gt;.append: &lt;Philadelphia&gt;;,因为目标数据结构(存储在%c&lt;USA&gt;)到那时,它已经被建立为一个可变数组,并且参数列表(&lt;Philadelphia&gt;)只是附加到那个已经存在的数组中。 (他说,希望他是对的……>.>)
    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    相关资源
    最近更新 更多