首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何打破八度开关?

如何打破八度开关?
EN

Stack Overflow用户
提问于 2014-08-12 13:07:47
回答 1查看 1.8K关注 0票数 1

octave (也许还有matlab)中,似乎没有办法打破switch语句,但我不确定.

代码语言:javascript
运行
复制
P=rand(2,20);
mu=mean(P,2);
dim=2;
plot_mean=false;

for i=1:1

switch (dim)
case 2
        % Print points as dots
        plot(P(1,:),P(2,:),'.');
        if (!plot_mean)
                break;
        endif
        hold on
        % Print mean values as red circles
        plot(mu(1,:),mu(2,:),'or');
        % Quite some more code following here with again several if statements that need to be broken out
case 3
        % Similar for 3D case
        % ...
endswitch

endfor

我刚刚把这个问题变成了一个完整的octave程序,可以用其他函数调用替换plot功能。重要的是,我从1:1中添加了一个1:1循环并使用break,但这当然只是一个技巧!

switchoctave中的常见突破是什么?

EN

回答 1

Stack Overflow用户

发布于 2014-08-12 13:12:00

也许我忽略了你问题的重点,但break只适用于循环。这就是你想要做的:

代码语言:javascript
运行
复制
switch (dim)
case 2
        % Print points as dots
        plot(P(1,:),P(2,:),'.');
        if (plot_mean)
            hold on
            % Print mean values as red circles
            plot(mu(1,:),mu(2,:),'or');
        end
case 3

否则,听起来就像是在尝试实现一个"goto"-like语句,这是一种糟糕的做法。而是重构您的代码(如上面所示)。

我认为这是不可能的,因为正如您的黑客所指出的那样,您可以从包含break的循环中获取其中一种情况下的switch。这是可能的,因为Octave/Matlab的行为与C不同。这些论坛上的帖子似乎同意,但这几乎不是决定性的证据:

  • http://www.mathworks.com/matlabcentral/answers/5718-use-of-break-in-switch-statement
  • thread/128319

但是,要回答您的问题,什么是从Octave中切换的正常方式,我想说的是,通常的方法是将代码封装在if语句中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25265124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档