我有一个代码段如下:
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));
但是,我似乎没有得到理想的结果。我知道这是错的。这是因为我使用了来自类似表达式的 return stement,即:
if(x < y)
return (x = y);
return 1;
我写的是:
return ((x < y) ? x = y : 1);
但是,如何返回一个值,该值涉及在三元运算符中事先分配完全不同的变量?
答案 0 :(得分:2)
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是一个语句,你必须返回整个表达式。所以这实际上取决于你在分配到y之后的进展方式。或者如果你真的需要在表达式中间改变执行顺序,你可以抛出一个异常,但是,我想,在这种情况下,这会太复杂。
答案 1 :(得分:1)
将代码块放在函数中。
function f(){
x = y;//assumes x, y and w are global.
return w;
}
然后在条件语句中使用该函数。
(a < b) ? f() : "value to return if a>=b";
您不需要在条件语句之前放置return
,因为自动返回值1,取决于对条件的评估。