[英]Return statement in conditional operator
我有一个代码段,如下所示:
if(a < b)
{
x = y;
return w;
}
/* all unrelated variables above*/
x = something;
y = something;
/*both x and y from above*/
x和y是全局变量,并且在if部分中对其进行了修改,我需要将y赋给x,然后返回w,或者简单地返回一个常数。
我需要使用三元运算符替换if部分:
我尝试了以下方法:
return (((a < b) ? (x = y, w) : 1), (x = something, y = something));
但是,我似乎没有得到理想的结果。 我知道这是错的。 这是因为我使用了类似表达式的返回值:
if(x < y)
return (x = y);
return 1;
我写为:
return ((x < y) ? x = y : 1);
但是,如何返回一个值,该值涉及在三元运算符中预先分配完全不同的变量?
Mankarse建议的解决方案:
return (a < b) ? (x = y, w) : (x = something, y = something, z);
实际上等于:
if (a < b) {
x = y;
return w;
}
/* all unrelated variables above*/
x = something;
y = something;
return z;
第二个return语句很重要。
您不能从表达式的中间有条件地返回,因为return是一条语句,因此您必须返回整个表达式。 因此,这实际上取决于分配给y之后要如何进行。 或者,如果您确实需要在表达式中间更改执行顺序,则可以抛出一个异常,但是在这种情况下,我认为那太复杂了。
将代码块放入函数中。
function f(){
x = y;//assumes x, y and w are global.
return w;
}
然后在条件语句中使用该函数。
(a < b) ? f() : "value to return if a>=b";
您不需要将return
放在条件语句之前,因为自动返回值的1,取决于条件的评估。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.