Matlab 非中断开关语句

Matlab 非中断开关语句,matlab,switch-statement,break,Matlab,Switch Statement,Break,我知道在MATLAB中,没有必要(就像在C++中一样)用“break;”结束switch语句的每个“case”。一旦找到第一个成功案例,语句将停止计算 不过,我有以下情况: switch variable case {0, 1} % Action A case {0, 2} % Action B end 在上述情况下,如果“variable”等于0,则只有操作A将完成。在variable=0的情况下,我希望两个操作都完成。我可以为0创建一个单独的

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

不过,我有以下情况:

switch variable
    case {0, 1}
        % Action A
    case {0, 2}
        % Action B
end
在上述情况下,如果“variable”等于0,则只有操作A将完成。在variable=0的情况下,我希望两个操作都完成。我可以为0创建一个单独的案例,激活两个动作a和B,但这似乎不是有效的编程,因为我必须复制两个动作

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

问候你所说的

我可以为0创建一个单独的案例,激活两个动作a和B,但这似乎不是有效的编程,因为我必须复制两个动作

不管效率如何,这可能是最具可读性的事情。我会一直追求可读性,直到你能证明某些代码是一个瓶颈。所以我会写:

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

function ActionA()
    ...
end

function ActionB()
    ...
end
如果您真的想要一个不断开的开关,您可以按照MATLAB Central的建议:

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


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

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

if((variable == 0) || (variable == 2))
  ActionB();
end
不幸的是,MATLAB语句没有提供直通逻辑的灵活性,因此在这种情况下您将无法使用它

您可以使用连续的
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
在我看来,它看起来仍然很优雅