不中断的switch语句

3
我知道在MATLAB中,在switch语句的每个“case”结尾不需要像C++一样加上“break;”。一旦找到第一个成功的case,语句就会停止评估。
然而,我遇到了以下情况:
switch variable
    case {0, 1}
        % Action A
    case {0, 2}
        % Action B
end

在上述情况下,如果“variable”等于0,则只完成操作A。在变量=0的情况下,我希望两个操作都能完成。我可以为0创建一个单独的情况,以激活操作A和B,但这似乎不是有效的编程方法,因为我需要复制两个操作。
我相信必须有一种简单的方法来解决这个问题,但我仍然是MATLAB的新手,所以我想知道我应该怎么做才能保持代码的整洁?
谢谢!
3个回答

7

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

在我看来,即使如此,它仍然会显得优雅。


6

代码长度并不一定等同于可读性或效率。我认为正确的做法是放弃使用switch语句,直接写出你的意思。

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

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

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 中实现 fall-through 行为,您可以在一个 case 中指定所有相关表达式,然后在代码的该部分内有条件地计算值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接