相关疑难解决方法(0)

Perl 条件(三元)运算符不执行快捷方式计算

条件(三元)运算符表明三元运算符是if...的替代品else。我一直这么认为,但最近我有一个逻辑问题。

考虑这个简短的调试会话:

  DB<1> $s='X'

  DB<2>  1 ? $s .= '_' : $s = '_'

  DB<3> x $s
0  '_'
Run Code Online (Sandbox Code Playgroud)

因此,如果为 true,则应该计算1表达式(而不是)。$s .= '_'$s = '_'

但为什么$s只是'_'最后呢?

perl conditional-operator

28
推荐指数
3
解决办法
2402
查看次数

三元产生与 If 不同的结果

编辑:对于遇到此问题的任何人,我发现在https://perldoc.perl.org/perlop#Conditional-Operator的 perldoc 中几乎逐字记录了这一点

在编写一个简单的子程序时,我发现我使用三元运算符不断得到错误的结果,但使用更简单的 if 语句得到正确的结果。我确定有一个解释,但我只是没有看到它。

当输入以下输入时:

my @input = (4, 5, 7, 8, 1, 2, 3, 0);
sum_square_even_root_odd(\@input);
Run Code Online (Sandbox Code Playgroud)

结果应该是 91.61。

以下(使用三元)结果为 175.61。

sub sum_square_even_root_odd {
    my ($nums) = @_;
    my $sum = 0;
    map { $_ % 2 ? $sum+= sqrt $_ : $sum += $_ ** 2 } @{$nums};
    return sprintf('%.2f', $sum) + 0;
};
Run Code Online (Sandbox Code Playgroud)

但是,结果是简单地更改为 if 语句时的预期结果

sub sum_square_even_root_odd {
    my ($nums) = @_;
    my $sum = 0;
    map { if( $_ % 2 ) …
Run Code Online (Sandbox Code Playgroud)

perl operator-precedence ternary

4
推荐指数
1
解决办法
79
查看次数