如何在不使用返回函数的情况下停止Matlab中的程序?

如何在不使用返回函数的情况下停止Matlab中的程序?,matlab,Matlab,我试图阻止下面的代码在程序中稍后继续,但我不能使用return语句。例如,在下面的开关语句中,如果代码遵循否则部分,我希望程序停止,而不使用返回或错误函数 case 1 rendevous = ('the Bridge'); case 2 rendevous = ('the Library'); case 3 rendevous = ('the River Crossing'); case 4 rendevous = ('the Airport'); case

我试图阻止下面的代码在程序中稍后继续,但我不能使用
return
语句。例如,在下面的
开关
语句中,如果代码遵循
否则
部分,我希望程序停止,而不使用
返回
错误
函数

case 1
    rendevous = ('the Bridge');
case 2 
    rendevous = ('the Library');
case 3
    rendevous = ('the River Crossing');
case 4
    rendevous = ('the Airport');
case 5
    rendevous = ('the Bus Terminal');
case 6
    rendevous = ('the Hospital');
case 7
    rendevous = ('St. Petes Church');
otherwise 
    disp('Decoy Message: Invalid Rendevous Point')
end 

如果您不想管理/传播特殊的
返回
代码或值(例如
[]
),并立即停止,我个人会使用
错误
语句,但在主调用函数中使用特殊标识符和
捕获
,以“隐藏”它(看起来这是您想要做的):

这样,根据错误标识符,调用函数的人可以决定如何适当地处理它(抛出或不抛出或执行特殊操作)

所有matlab内置错误和警告都有标识符,向您可能引发的自定义错误和警告添加标识符是一件好事。这样,人们调用你的代码可以决定处理这些错误,因为他们希望或暂时(或绝对)禁用这些警告,如果他们认为这是适当的或不。请参阅以下链接中的更多内容:


PS:坏习惯,但是如果你愿意,你当然可以把所有的东西(例如,
main
doSomething
)放在一个单独的例程中。

鉴于你不能使用
return
,你应该在这里使用,你可以改为使用这个更复杂的逻辑(正如第一次建议的那样)。我不推荐使用它,但它是一种解决缺少
返回的方法

开关n
案例1
rendevous=(“桥”);
案例2
rendevous=(“图书馆”);
%其他情况。。。
否则
%违法案件
rendevous=[];
结束
如果~ i空(rendevous)
%继续在这里处理。。。
结束

在非法情况下,将变量设置为特定的“错误条件”值,然后测试该条件以避免执行任何其他工作。您可以使用一个单独的
error\u条件
变量,在切换之前设置为
false
,在非法情况下设置为
true
,或者您也可以使用正在使用的变量,比如这里的
rendevous
,设置为哨兵值,在这种情况下设置为空数组。

您所说的“我不能使用返回函数”是什么意思? 由于编写的代码不是函数,而是脚本,因此
return
无论如何都不起作用。如果我理解,您可以使用
否则
块来设置
rendevous='
,例如,然后将任何剩余的代码包装在
If
块中,如果rendevous为空则不会执行?还要注意的是,您不需要paren,即只需执行
rendevous='thebridge'也就是说,这确实是一个关于一般编程的基本问题,因此可能值得先了解一些一般背景知识。请提供更多信息:为什么不能使用
错误
语句或
返回
语句?这是脚本还是函数?您希望MATLAB停止执行并返回MATLAB提示符,还是希望MATLAB关闭?请注意,
否则
案例中的
错误
语句是常见且正确的操作:用户输入了无效的数据点,您需要抛出错误。@Justin函数返回以停止程序继续。我也不希望出现错误语句,只需要在遇到其他情况时停止程序。但是我不想显式地使用返回函数,而是一堆代码或单独的函数本身来停止程序。@Justin
return
确实在脚本中工作以退出执行。@laugoutloudbro121您没有回答Cris的问题-如果
return
命令完全满足您的需要,为什么不能使用它呢?您能提供更多关于它的详细信息吗我真正需要做的是,我完全不知道我在做什么,我以前的编码知识也帮不上什么忙。我想这正是我在最初的评论中建议的@笑声,你有一个完整的答案。你要求更多的细节,但如果你没有说你到底想要实现什么,就没有办法给你更多的信息。试着读一下@Justin:事实上,这和你在评论中建议的是一样的。对不起,我没看到。修改了答案,给你评分。
function [] = main(id)
%[
    try
       doSomething(id);
    catch(err)
        if (strcmpi(err.identifier, 'DecoyMessage:InvalidRendevousPoint'))
             return; % Just leave the program without any error prompt (or add specific error handling code here)
        else
            rethrow(err); % Still raise other error cases
        end
    end
%]
end

function [] = doSomething(id)
%[
    ...

    switch(id)
        case 1, rendevous = ('the Bridge');
        case 2, rendevous = ('the Library');
        case 3, rendevous = ('the River Crossing');
        case 4, rendevous = ('the Airport');
        case 5, rendevous = ('the Bus Terminal');
        case 6, rendevous = ('the Hospital');
        case 7, rendevous = ('St. Petes Church');
        otherwise, error('DecoyMessage:InvalidRendevousPoint', 'Invalid rendezvous point');
    end

    ...
%]
end