Perl中的基本循环差异(/ 1)
最近我试图用Perl做一个简单的循环,我发现了一个我不明白的行为.
这里的行为: my $a = {index => 0}; for (0 .. 10) { $a->{index} = ($a->{index}++) % 2; warn $a->{index}; } 此代码的输出将是: 0,..,0 但是,如果我使用$a-> {index} 1替换$a-> {index}的“相同”代码,循环将会很好,例如 my $a = {index => 0}; for (0 .. 10) { $a->{index} = ($a->{index}+1) % 2; warn $a->{index}; } 输出将是: 1,1,0... 在这种情况下,有人可以解释一下/ 1之间的区别吗?我发现这真的很“难看”,因为如果我没有将结果分配给案例中的任何变量“”代码将按预期工作,除非我将总和放在()中. 此代码将正确执行循环: my $a = {index => 0}; for (0 .. 10) { warn $a->{index}++ % 2; } 使用()总和,代码将输出:1,2,3,4,5,6,7,8,9 my $a = {index => 0}; for (0 .. 10) { warn ($a->{index}++) % 2; } 解决方法
$a-> {index} 1返回$a-> {index} 1,而
$a-> {index}在更改前返回$a-> {index}. $a-> {index}返回$a-> {index} 1,但在该表达式中使用它是没有意义的,因为它不必要地更改$a-> {index}.
>假设$a-> {index}最初为0.
>假设$a-> {index}最初为0. 选项: $a->{index} = ( $a->{index} + 1 ) % 2; if ($a->{index}) { ... } 要么 $a->{index} = $a->{index} ? 0 : 1; if ($a->{index}) { ... } 要么 $a->{index} = !$a->{index}; if ($a->{index}) { ... } 要么 if (++$a->{index} % 2) { ... } 要么 if ($a->{index}++ % 2) { ... } 请注意,最后两个选项在$a-> {index}中的值不断增加,而不是0或1. 请注意,最后两个选项的不同之处在于第一遍的条件是真还是假. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |