Как работает это вложенное троичное выражение?
Я делал функцию Clamp() в php и решил использовать вложенное троичное выражение, чтобы попробовать его. В итоге я остановился на этой (рабочей) функции:
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;
}
... но в этой версии он вернется $max
если $value
меньше чем $min
, Я просто не понимаю, как это получается.
1 ответ
Я слышал, что у php "левая ассоциативность" с троичным, хотя я так и не понял, что это значит:
принимать$bool ? "a" : $bool ? "b" : "c"
Правильная ассоциативность это: $bool ? "a" :
($bool ? "b" : "c")
Левая ассоциативность это: ($bool ? "a" : $bool)
? "b" : "c"
Таким образом, в конце концов php всегда будет оцениваться как b или c.
Бонус:$bool ? $bool ? "c" : "b" : "a"
Вот синтаксис, который, я думаю, не изменит смысл на основе ассоциативности. Интересно, удалось ли людям найти красивый отступ для этого варианта.