3

我知道在 MATLAB 中没有必要(就像在 C++ 中一样)用“break;”结束 switch 语句的每个“case”。一旦找到第一个成功案例,该语句就会停止评估。

但是,我有以下情况:

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

在上述情况下,如果 'variable' 等于 0,那么只有 Action A 会完成。在变量 = 0 的情况下,我希望完成这两个操作。我可以为 0 制作一个单独的案例,它同时激活动作 A 和 B,但这看起来几乎不像是有效的编程,因为我必须复制这两个动作。

我确信必须有一个简单的方法来做到这一点,但我仍然是 MATLAB 的新手,所以我想知道我可以做些什么来保持我的代码整洁?

问候

4

3 回答 3

7

The MATLAB switch statement unfortunately does not provide the flexibility of fall-through logic, so you won't be able to use it in this case.

You could replace the switch with successive if statements (accompanied by a few comments) and this is what you'd get:

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

and it would still look elegant in my opinion.

于 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

你说

我可以为 0 制作一个单独的案例,它同时激活动作 A 和 B,但这看起来几乎不像是有效的编程,因为我必须复制这两个动作。

不管效率如何,这可能是最易读的事情。在您证明某些代码是瓶颈之前,我总是会追求可读性。所以我会写:

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

function ActionA()
    ...
end

function ActionB()
    ...
end

如果您真的想要一个不间断的开关,您可以遵循 MATLAB Central博客文章中关于 switch 语句的建议:

要在 MATLAB 中实现失败行为,您可以在一种情况下指定所有相关表达式,然后有条件地计算该部分代码中的值。

于 2012-05-24T15:16:13.413 回答