2012-05-24 53 views
2

据我所知,在MATLAB,没有必要(因为它是在C++),以结束与每一个switch语句的“案件”“打破;”。一旦发现第一个成功案例,该声明就停止评估。非断开开关语句

不过,我有以下情况:

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

在上述情况下,如果“变量”等于0,那么只有一个行动将完成。在变量= 0的情况下,我想要两个动作来完成。我可以进行单独的情况下0激活两种选择A & B,但是这几乎是一样高效的编程,我不得不重复这两个动作。

我敢肯定,必须有一个简单的方法来做到这一点,但我仍然是相对的新手到MATLAB所以我不知道我可以做的,让我的代码整洁什么?

问候

回答

5

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

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中央blog post on the switch statement建议:

为了实现MATLAB落空的行为,你可以指定所有相关表达式在一个情况下,然后有条件地计算该代码段内的值。

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 

,它看上去依然优雅在我看来。