【问题标题】:Are there cases when I have to use `elems` with an array to make it work?在某些情况下,我必须将 `elems` 与数组一起使用才能使其工作?
【发布时间】:2020-07-16 09:55:15
【问题描述】:

在阅读了this answer 之后,我查看了我的代码,发现了一些我在数组中使用elems 的地方。

我可以在不影响代码的情况下删除所有elems

my @a = 1, 2, 3, 4, 5;
my $b = [ 1, 2, 3, 4 ];

my $i = 2;
say $i + @a.elems;
say $i + @a;

say "===============";
say @a.elems;
say 0 + @a;

say "===============";
say $b.elems / 2;
say $b / 2;

say "===============";
while state $c++ > $b.elems {
    say $c;
}
while state $d++ > $b {
    say $d;
}

这让我想知道是否存在必须使用 elems 函数调用数组才能使代码正常工作的情况。

【问题讨论】:

    标签: arrays element raku


    【解决方案1】:

    每当数字运算符将Iterable 视为其操作数之一时,它就会对其调用.elems 方法。有时这会导致FailureException 被抛出:

    $ raku -e 'say (1 ... *) + 42'
    Cannot .elems a lazy list
    

    请注意,在您的代码中使用 .elems 有两个优点:

    • 它使您的意图明确,有利于未来的维护者
    • 效率会稍微高一些,因为它会跳过操作员调用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 2018-03-16
      • 2018-11-28
      相关资源
      最近更新 更多