这个嵌套的三元表达式是如何工作的?
How does this nested ternary expression work?
我在 php 中制作了一个 clamp() 函数,并决定使用嵌套的三元表达式来尝试一下。
最后,我解决了这个(工作)功能:
function clamp($value, $min, $max){
return
$value<$min ? $min
: ($value>$max ? $max
: $value);
}
但是,为什么第二个表达式需要括号?之后我尝试删除它们:..
function clamp($value, $min, $max){
return
$value<$min ? $min
: $value>$max ? $max
: $value;
}
...但在这个版本中,如果 $value
小于 $min
,它将 return $max
。我就是不明白这个结果是怎么来的。
我听说 php 有 "left associativity" 三元,虽然我一直不明白它是什么意思:
拿
$bool ? "a" : $bool ? "b" : "c"
右结合律为:$bool ? "a" :
($bool ? "b" : "c")
左结合律为:($bool ? "a" : $bool)
? "b" : "c"
所以最后 php 将始终评估为 b 或 c.
奖金:
$bool ? $bool ? "c" : "b" : "a"
这是我认为不会根据关联性改变含义的语法。
我想知道人们是否设法为这个变体找到一个漂亮的缩进。
我在 php 中制作了一个 clamp() 函数,并决定使用嵌套的三元表达式来尝试一下。 最后,我解决了这个(工作)功能:
function clamp($value, $min, $max){
return
$value<$min ? $min
: ($value>$max ? $max
: $value);
}
但是,为什么第二个表达式需要括号?之后我尝试删除它们:..
function clamp($value, $min, $max){
return
$value<$min ? $min
: $value>$max ? $max
: $value;
}
...但在这个版本中,如果 $value
小于 $min
,它将 return $max
。我就是不明白这个结果是怎么来的。
我听说 php 有 "left associativity" 三元,虽然我一直不明白它是什么意思:
拿
$bool ? "a" : $bool ? "b" : "c"
右结合律为:$bool ? "a" :
($bool ? "b" : "c")
左结合律为:($bool ? "a" : $bool)
? "b" : "c"
所以最后 php 将始终评估为 b 或 c.
奖金:
$bool ? $bool ? "c" : "b" : "a"
这是我认为不会根据关联性改变含义的语法。
我想知道人们是否设法为这个变体找到一个漂亮的缩进。