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

Are there cases when I have to use `elems` with an array to make it work?

阅读 后,我查看了我的代码,发现了一些我使用 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 有两个优点:

  • 它使您的意图明确,对未来的维护者有好处
  • 它会稍微更有效率,因为它会跳过运算符调用