【发布时间】:2015-10-10 16:09:27
【问题描述】:
MATLAB documentation 描述了 break 关键字:
break终止 for 或 while 循环的执行。 break 语句之后的循环中的语句不执行。- 在嵌套循环中,break 仅从它发生的循环中退出。控制权传递给循环结束后的语句。
(我的重点)
如果你想退出多个嵌套循环怎么办?其他语言(例如 Java)提供 labelled breaks,允许您指定控制流的传输位置,但 MATLAB 缺少这种机制。
考虑以下示例:
% assume A to be a 2D array
% nested 'for' loops
for j = 1 : n
for i = 1 : m
if f(A(i, j)) % where f is a predicate
break; % if want to break from both loops, not just the inner one
else
% do something interesting with A
end
end
% <--- the break transfers control to here...
end
% <--- ... but I want to transfer control to here
退出两个循环的惯用方式(在 MATLAB 中)是什么?
【问题讨论】:
-
我只是提取一个函数并从中返回
-
您需要使用其他机制来退出所有嵌套循环。例如。添加更多 if 或将整个循环结构传递给函数,然后使用
return而不是break -
一个“惯用的”答案将取决于案件的具体情况。例如,您当前的示例根本不应该是一个嵌套循环,但使用线性索引会更好地执行,然后您只需要一个
break。 -
好吧,那么你的答案是“没有办法”。您正在寻找的东西可能在 Java 中是可能的,但老实说,这听起来很像变相的 goto。我看不到每种编程语言中如何“需要存在”该功能。在 Matlab 中,您将避免以其他方式需要该功能。通常这将向量化您的代码。由于矢量化您的示例很容易,这听起来像是一个计划。
标签: matlab nested-loops break labelled-break