据我所知,在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的新手,所以我想知道我能做些什么来保持我的代码整洁?
此致
答案 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中实现跌倒行为,您可以在一个案例中指定所有相关表达式,然后有条件地计算该段代码中的值。