使用其中一个for循环来计算整数的参数是什么?
for my $i (0..$n) { ... }
for (my $i = 0; $i <= $n; $i++) { ... }
Run Code Online (Sandbox Code Playgroud)
Bri*_*ach 11
在你的情况下,没有区别.
在其他用例中,在for-each循环中,您无法控制/访问迭代器.
编辑试图让这个更清晰:
使用您的示例语法:
for my $i (0..10)
{
print "$i";
$i++;
}
Run Code Online (Sandbox Code Playgroud)
上面实际上创建了一个foreach循环 - 它与说法相同foreach my $i (0..10).$i是从列表返回的值,而不是迭代器.迭代器是内部的,你无法访问它; 你无法控制循环的流量.
将打印上面的输出 012345678910
这个:
for ( my $i = 0; $i++ ; $i <= 10)
{
print $i;
$i++;
}
Run Code Online (Sandbox Code Playgroud)
这是一个实际的for循环.您正在控制并输出迭代器.它将输出:
for
编辑:此外:
当您这样做时,0246810您将调用范围运算符,而不是在循环顶部进行简单比较.但是,性能差异是无法估量的.
forPerl中两种循环风格之间的区别在于清晰度和效率.
当你看时,for my $i (0 .. $n) {...}你可以立即看到正在使用的范围,而无需在心理上解析更大的表达.
随着时间的推移for (my $i = 0; $i <= $n; $i++) {...}还有很多,以及更多可能出现错误的地方.
此外,foreach超出范围比等效C风格循环更快,如以下基准所示:
use Benchmark 'cmpthese';
for my $mag (map 10**$_, 1 .. 6) {
print "\n$mag:\n";
cmpthese -2 => {
loop => sub {my $x = 0; for (my $i = 0; $i <= $mag; $i++) {$x += $i}},
each => sub {my $x = 0; for my $i (0 .. $mag) {$x += $i}},
};
}
Run Code Online (Sandbox Code Playgroud)
打印:
10:
Rate loop each
loop 613877/s -- -2%
each 625568/s 2% --
100:
Rate loop each
loop 79481/s -- -24%
each 104758/s 32% --
1000:
Rate loop each
loop 8140/s -- -27%
each 11220/s 38% --
10000:
Rate loop each
loop 832/s -- -26%
each 1124/s 35% --
100000:
Rate loop each
loop 81.6/s -- -26%
each 110/s 34% --
1000000:
Rate loop each
loop 6.90/s -- -26%
each 9.27/s 34% --
| 归档时间: |
|
| 查看次数: |
22211 次 |
| 最近记录: |