不间断的开关语句

时间:2012-05-24 14:59:07

标签: matlab switch-statement break

据我所知,在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的新手,所以我想知道我能做些什么来保持我的代码整洁?

此致

3 个答案:

答案 0 :(得分:6)

遗憾的是,MATLAB switch语句没有提供直通逻辑的灵活性,因此在这种情况下你无法使用它。

您可以使用连续的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

在我看来它看起来仍然很优雅。

答案 1 :(得分:5)

代码长度不一定与可读性或效率相同。我认为正确的答案是放弃开关并写下你的意思:

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

if((variable == 0) || (variable == 2))
  ActionB();
end

答案 2 :(得分: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的建议blog post on the switch statement

  

要在MATLAB中实现跌倒行为,您可以在一个案例中指定所有相关表达式,然后有条件地计算该段代码中的值。