Perl 6 是否有等同于 Python 的字典更新方法?
Does Perl 6 have an equivalent to Python's update method on dictionary?
在 Python 中,如果我用另一个名为 u
的字典更新 dict
字典(使用 Perl
作为键),它将更新值:
>>> 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 的字典更新方法?
在 Perl 6 中,一种选择是使用 hash slice:
my %u = (Perl => 6);
%hash{%u.keys} = %u.values;
结果:
{Perl => 6, Python => 2}
您可以使用 ,
运算符进行更新:
my %u = Perl => 6;
my %hash = 'Python' => 2, Perl => 5;
%hash = %hash, %u;
say %hash; # => {Perl => 6, Python => 2}
当然你可以将更新行缩短为
%hash ,= %u;
如果您不喜欢其中任何一个,请自己动手...
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
置于程序顶部的侮辱性,您知道自己在做什么
在 Python 中,如果我用另一个名为 u
的字典更新 dict
字典(使用 Perl
作为键),它将更新值:
>>> 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 的字典更新方法?
在 Perl 6 中,一种选择是使用 hash slice:
my %u = (Perl => 6);
%hash{%u.keys} = %u.values;
结果:
{Perl => 6, Python => 2}
您可以使用 ,
运算符进行更新:
my %u = Perl => 6;
my %hash = 'Python' => 2, Perl => 5;
%hash = %hash, %u;
say %hash; # => {Perl => 6, Python => 2}
当然你可以将更新行缩短为
%hash ,= %u;
如果您不喜欢其中任何一个,请自己动手...
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
置于程序顶部的侮辱性,您知道自己在做什么