是否存在必须将"elems"与数组一起使用才能使其工作的情况



在阅读了这个答案后,我查看了我的代码,发现了一些将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函数调用数组才能使代码工作的情况。

每当数值运算符将Iterable作为其操作数之一时,它都会调用其上的.elems方法。有时这会导致抛出FailureException

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

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

  • 它使您的意图变得明确,有利于未来的维护人员
  • 它的效率会稍高一些,因为它会跳过接线员的电话

相关内容

最新更新