Perl 6是否有类似Python字典的update方法的等效方法?

11

在Python中,如果我使用另一个名为u的字典(将Perl用作键)来更新dict字典,它将更新值:

在Python中,如果我使用一个名为u的字典(以Perl作为键)去更新dict字典,它将会更新该键对应的值:

>>> dict = {'Python':'2', 'Perl' : 5}
>>> u = {'Perl' : 6}
>>> dict.update(u)
>>> dict
{'Python': '2', 'Perl': 6}

但在Perl 6中:

> my %hash = 'Python' => 2, Perl => 5;
> my %u = Perl => 6
> %hash.append(%u)
{Perl => [5 6], Python => 2}

那么,Perl 6是否有类似于Python字典的update方法的等效方法?

3个回答

19
你可以使用 , 运算符进行更新:
my %u = Perl => 6;
my %hash = 'Python' => 2, Perl => 5;
%hash = %hash, %u;
say %hash;   # => {Perl => 6, Python => 2}

当然,您可以缩短更新行为

%hash ,= %u;

10
在 Perl 6 中,一种选项是使用哈希片段(hash slice):Hash
my %u = (Perl => 6);
%hash{%u.keys} = %u.values;

结果:

{Perl => 6, Python => 2}

3

如果您不喜欢这两种方法,那么您可以自己定制...

sub infix:<Update>(%h , %u) { %h{ %u.keys } = %u.values }

my %hash  = Python => 2, Perl => 5;
my %u = Perl => 6 , Rust => 4.5 ;

%hash Update %u ;
say "After: %hash.perl()" ;    # After: {:Perl(6), :Python(2), :Rust(4.5)}

您还可以增强全局哈希类型;

augment class Hash {
    method update(%u) { self{ %u.keys } = %u.values }
}

%hash  = Python => 2, Perl => 5;
%u = Perl => 6 , Rust => 4.5 ;

%hash.update: %u ;
say "After: %hash.perl()" ;    # After: {:Perl(6), :Python(2), :Rust(4.5)}

..但是,由于这可能是最终的远程操作,你必须承认通过在程序顶部放置use MONKEY-TYPING来遭受尴尬,以确保你知道自己在做什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接