Skip to content

MATLAB - End 语句

在 MATLAB 中,end 关键字是语言语法的基本组成部分。与使用大括号 {} 或缩进来定义代码块的语言不同,MATLAB 使用 end 来显式终止函数、循环和条件语句等结构。该关键字在用于数组索引时具有第二个强大的含义。

每个封装代码块的控制流语句或程序单元都必须与一个 end 配对。这为块内的代码创建了一个清晰、明确的作用域。

考虑一个处理矩阵的函数。end 关键字清楚地划分了函数、for 循环和 if 语句的作用域。

function positiveCount = countPositiveElements(matrix)
% 此函数计算每列中正元素的数量。
[~, numCols] = size(matrix);
positiveCount = zeros(1, numCols); % 预分配结果数组
for c = 1:numCols % 遍历每一列
col = matrix(:, c);
for r = 1:length(col) % 遍历列中的每个元素
if col(r) > 0 % 检查元素是否为正
positiveCount(c) = positiveCount(c) + 1;
end % 此 'end' 终止 'if' 语句
end % 此 'end' 终止内部 'for' 循环
end % 此 'end' 终止外部 'for' 循环
end % 此 'end' 终止 'function'

最佳实践:自动缩进以提高清晰度

Section titled “最佳实践:自动缩进以提高清晰度”

MATLAB 编辑器提供了管理 end 语句的一项关键功能。按下 Ctrl+I(或 macOS 上的 Cmd+I)将自动缩进您的代码。如果您的缩进看起来不正确,这是一个强烈的视觉提示,表明您有一个不匹配或缺失的 end 语句。这是调试作用域问题的最有效方法。

这是 MATLAB 的一个强大且惯用的特性。当在括号 () 或大括号 {} 内用于索引时,end 会自动解析为该维度的最后一个索引。

myVector(end) % 访问向量的最后一个元素
myMatrix(end, 1) % 访问最后一行第一列的元素
myMatrix(1, end) % 访问第一行最后一列的元素
myVector(2:end) % 访问从第二个到最后一个的所有元素
myVector(end-2:end) % 访问最后三个元素

让我们看看 end 如何简化常见的数据操作任务。

% 创建一个示例矩阵
A = [ 1, 2, 3, 4;
5, 6, 7, 8;
9, 10, 11, 12];
% 获取整个最后一列
lastCol = A(:, end);
% 结果: [4; 8; 12]
% 获取整个最后一行
lastRow = A(end, :);
% 结果: [9, 10, 11, 12]
% 获取一个不包含第一行和最后一列的子矩阵
subMatrix = A(2:end, 1:end-1);
% 结果: [5, 6, 7; 9, 10, 11]
% 在矩阵末尾添加新行
A(end+1, :) = [13, 14, 15, 16];
% A 现在是一个 4x4 矩阵
  • Parse error at ‘end’:这通常意味着您有一个额外的 end 语句,它不对应任何开头的 function、for、if 等。使用自动缩进器来找到它。
  • An ‘end’ might be missing:当代码块未闭合时会发生此错误。MATLAB 编辑器通常会在预期 end 的位置附近显示红色下划线。
  • 在索引上下文之外使用 end:在命令行窗口单独输入 end 将导致错误,因为它只在终止块或用于索引时才有意义。