【问题标题】:Does Perl 6 have an equivalent to Python's update method on dictionary?Perl 6 是否有相当于 Python 的字典更新方法?
【发布时间】:2019-10-17 22:12:39
【问题描述】:

在 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 的字典更新方法?

【问题讨论】:

    标签: raku


    【解决方案1】:

    您可以使用, 运算符进行更新:

    my %u = Perl => 6;
    my %hash = 'Python' => 2, Perl => 5;
    %hash = %hash, %u;
    say %hash;   # => {Perl => 6, Python => 2}
    

    当然你也可以把更新行缩短到

    %hash ,= %u;
    

    【讨论】:

      【解决方案2】:

      在 Perl 6 中,一种选择是使用 hash slice:

      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 置于程序顶部的侮辱,您知道自己在做什么

        【讨论】:

          猜你喜欢
          • 2018-12-03
          • 2012-07-28
          • 2011-04-05
          • 1970-01-01
          • 1970-01-01
          • 2013-04-18
          • 2013-05-03
          • 2011-01-13
          • 1970-01-01
          相关资源
          最近更新 更多