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