是否存在我必须将“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
方法。有时这会导致 Failure
或 Exception
被抛出:
$ raku -e 'say (1 ... *) + 42'
Cannot .elems a lazy list
请注意,在您的代码中使用 .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
方法。有时这会导致 Failure
或 Exception
被抛出:
$ raku -e 'say (1 ... *) + 42'
Cannot .elems a lazy list
请注意,在您的代码中使用 .elems
有两个优点:
- 它使您的意图明确,对未来的维护者有好处
- 它会稍微更有效率,因为它会跳过运算符调用