gpt4 book ai didi

perl - Perl 中基本循环法之间的区别 (++/+1)

转载 作者:行者123 更新时间:2023-12-01 18:32:17 25 4
gpt4 key购买 nike

最近我试图用 Perl 做一个简单的循环,我发现了一个我不太理解的行为。

这里的行为:

my $a = {index => 0};
for (0 .. 10) {
$a->{index} = ($a->{index}++) % 2;
warn $a->{index};
}

此代码的输出将是:

0,0,0,..,0

但是如果我用 $a->{index}+1 替换 $a->{index}++ 的“相同”代码,循环就会没问题,例如

my $a = {index => 0};
for (0 .. 10) {
$a->{index} = ($a->{index}+1) % 2;
warn $a->{index};
}

输出将是:

1,0,1,0,1,0,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} = ($a->{index}+1) % 2;

  1. 假设 $a->{index} 最初为 0
  2. $a->{index}+1 返回 1
  3. 然后将 1 % 2(即 1)分配给 $a->{index}
<小时/>

$a->{index} = $a->{index}++ % 2;

  1. 假设 $a->{index} 最初为 0
  2. $a->{index}++$a->{index} 设置为 1 并返回 0(旧值)。
  3. 然后将 0 % 2(即 0)分配给 $a->{index}
<小时/>

选项:

$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} 中留下不断增加的值,而不是 01

请注意,最后两个选项的不同之处在于第一次传递时条件为真还是假。

关于perl - Perl 中基本循环法之间的区别 (++/+1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32120442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com