繁体   English   中英

条件运算符中的return语句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM