gpt4 book ai didi

perl - Perl 如何决定对表达式中的项求值的顺序?

转载 作者:行者123 更新时间:2023-12-04 16:17:10 25 4
gpt4 key购买 nike

鉴于代码:

my $x = 1;

$x = $x * 5 * ($x += 5);

我希望 $x成为 180 :
$x = $x * 5 * ($x += 5); #$x = 1
$x = $x * 5 * 6; #$x = 6
$x = 30 * 6;
$x = 180;
180;

但它是 30 ;但是,如果我更改条款的顺序:
$x = ($x += 5) * $x * 5;

我确实收到 180 .我感到困惑的原因是 perldoc perlop 非常直白地说:

A TERM has the highest precedence in Perl. They include variables, quote and quote-like operators, any expression in parentheses, and any function whose arguments are parenthesized.



($x += 5)在括号中,它应该是一个术语,因此无论表达式的顺序如何,都首先执行。

最佳答案

输入问题的行为给了我答案:术语具有最高优先级。这意味着 $x在第一块代码中被评估并产生 1 ,然后 5被评估并产生 5 ,然后 ($x += 5)评估并产生 6 (具有将 $x 设置为 6 的副作用):

$x = $x * 5 * ($x += 5);
address of $x = $x * 5 * ($x += 5); #evaluate $x as an lvalue
address of $x = 1 * 5 * ($x += 5); #evaluate $x as an rvalue
address of $x = 1 * 5 * ($x += 5); #evaluate 5
address of $x = 1 * 5 * 6; #evaluate ($x += 5), $x is now 6
address of $x = 1 * 5 * 6; #evaluate 1 * 5
address of $x = 5 * 6; #evaluate 1 * 5
address of $x = 30; #evaluate 5 * 6
30; #evaluate address of $x = 30

同样,第二个例子像这样减少:
$x = ($x += 5) * $x * 5; 
address of $x = ($x += 5) * $x * 5; #evaluate $x as an lvalue
address of $x = 6 * $x * 5; #evaluate ($x += 5), $x is now 6
address of $x = 6 * 6 * 5; #evaluate $x as an rvalue
address of $x = 6 * 6 * 5; #evaluate 5
address of $x = 36 * 5; #evaluate 6 * 6
address of $x = 180; #evaluate 36 * 5
180; #evaluate $x = 180

关于perl - Perl 如何决定对表达式中的项求值的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1682332/

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