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

しかし、私は望ましい結果を得ていないようです。私はそれが間違っていることを知っています。これは、同様の式からreturn語幹を使用したためです。つまり、次のとおりです。

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;

2 番目の return ステートメントは重要です。

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 に答える