0

我有一个代码段如下:

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);

但是,我如何返回一个值,这涉及在三元运算符中预先分配一个完全不同的变量?

4

2 回答 2

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 之后如何进行。或者,如果您确实需要在表达式中间更改执行顺序,您可以抛出异常,但我想,在这种情况下会太复杂。

于 2013-03-02T07:07:04.433 回答
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,取决于条件的评估。

于 2013-03-02T06:20:52.787 回答