3

私は、MATLABでは(C ++の場合のように)switchステートメントの各'case'を'break;'で終了する必要がないことを理解しています。ステートメントは、最初に成功したケースが見つかると評価を停止します。

ただし、次のような状況があります。

switch variable
    case {0, 1}
        % Action A
    case {0, 2}
        % Action B
end

上記の状況で、「変数」が0に等しい場合、アクションAのみが完了します。変数=0の場合、両方のアクションを完了させたいです。アクションAとBの両方をアクティブにする0の個別のケースを作成することもできますが、両方のアクションを複製する必要があるため、効率的なプログラミングとは思えません。

これを行う簡単な方法があるはずですが、私はまだMATLABの比較的初心者なので、コードを整理するために何ができるでしょうか。

よろしく

4

3 に答える 3

7

残念ながら、MATLABswitchステートメントはフォールスルーロジックの柔軟性を提供しないため、この場合は使用できません。

switchを連続するifステートメント(いくつかのコメントを伴う)に置き換えることができ、これが得られるものです:

%# Switch variable
if (variable == 0 || variable == 1)  %# case {0, 1}
   %# Action A
end
if (variable == 0 || variable == 2)  %# case {0, 2}
   %# Action B
end

そしてそれは私の意見ではまだエレガントに見えるでしょう。

于 2012-05-24T15:20:14.817 に答える
6

コードの長さは、必ずしも読みやすさや効率と同じではありません。正しい答えは、スイッチを破棄して、意味を書くことだと私は主張します。

if((variable == 0) || (variable == 1))
  ActionA();
end

if((variable == 0) || (variable == 2))
  ActionB();
end
于 2012-05-24T15:19:31.290 に答える
2

あなたは述べます

アクションAとBの両方をアクティブにする0の個別のケースを作成することもできますが、両方のアクションを複製する必要があるため、効率的なプログラミングとは思えません。

効率に関係なく、これはおそらく最も読みやすいことです。コードの一部がボトルネックであることが証明されるまで、私は常に読みやすさを追求します。だから私は書くだろう:

switch variable
    case 0
        ActionA()
        ActionB()
    case 1
        ActionA()
    case 2
        ActionB()
end

function ActionA()
    ...
end

function ActionB()
    ...
end

ブレークしないスイッチが本当に必要な場合は、switchステートメントに関するMATLABCentralブログ投稿のアドバイスに従うことができます。

MATLABでフォールスルー動作を実現するには、関連するすべての式を1つのケースで指定してから、コードのそのセクション内の値を条件付きで計算します。

于 2012-05-24T15:16:13.413 に答える