【问题标题】:Non-breaking switch statements不间断的 switch 语句
【发布时间】:2012-05-24 14:59:06
【问题描述】:

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

但是,我有以下情况:

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

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

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

问候

【问题讨论】:

    标签: matlab switch-statement break


    【解决方案1】:

    遗憾的是,MATLAB switch 语句不提供贯穿逻辑的灵活性,因此在这种情况下您将无法使用它。

    您可以将 switch 替换为连续的 if 语句(伴随着几个 cmets),这就是您会得到的:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        你说

        我可以为 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 中实现失败行为,您可以在一种情况下指定所有相关表达式,然后有条件地计算该部分代码中的值。

        【讨论】:

          猜你喜欢
          • 2011-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多