我遇到了以下一行
hsb.s = max != 0 ? 255 * delta / max : 0;
?
和:
在此背景下的含义是什么?
答案 0 :(得分:340)
它被称为Conditional Operator(ternary operator)。
它的形式为:condition
? value-if-true
:value-if-false
将?
视为“然后”,将:
视为“其他”。
您的代码等同于
if (max != 0)
hsb.s = 255 * delta / max;
else
hsb.s = 0;
答案 1 :(得分:34)
为了清晰起见,请正确括号,
hsb.s = (max != 0) ? (255 * delta / max) : 0;
意思是返回
255*delta/max
if max!= 0 0
如果max == 0 答案 2 :(得分:7)
如果用括号括起来,可能会更清楚一点:
hsb.s = (max != 0) ? (255 * delta / max) : 0;
它的作用是评估第一个括号中的部分。如果结果为真则那么后面的部分?并在:返回之前。如果它是假的,那么返回的是:
答案 3 :(得分:7)
hsb.s = max!= 0? 255 * delta / max:0;
?是一个三元运算符,它与if结合使用:
!=表示不等于
所以,这一行的长形式将是
if (max != 0) { //if max is not zero
hsb.s = 255 * delta / max;
} else {
hsb.s = 0;
}
答案 4 :(得分:1)
? :
这不是三元运算符吗?
var x= expression ? true:false
答案 5 :(得分:0)
?:是else {}
和if(){}
问题的简写条件。
因此,您的代码可以与此互换:
if(max != 0){
hsb.s = 225 * delta / max
}
else {
hsb.s = 0
}
答案 6 :(得分:-3)
小心这一点。 A -1的计算结果为真,尽管-1!= true且-1!= false。相信我,我已经看到它发生了。
所以
-1? “真实的一面”:“虚假的一面”
评估为“真实的一面”