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

sid*_*com 6 arrays element raku

阅读此答案后,我查看了我的代码并找到了一些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;
}
Run Code Online (Sandbox Code Playgroud)

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

Eli*_*sen 7

每当数字运算符将 anIterable视为其操作数之一时,它就会调用其.elems上的方法。有时这会导致抛出aFailure或 an Exception

$ raku -e 'say (1 ... *) + 42'
Cannot .elems a lazy list
Run Code Online (Sandbox Code Playgroud)

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

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