Skip to content

MATLAB - End 函数

end 关键字是 MATLAB 语法的一个基本组成部分,具有两种独特而强大的用法:

  1. 作为语句终止符:它标志着代码块的结束,例如循环、条件语句或函数定义。
  2. 作为索引快捷方式:它指代数组某一维度中的最后一个元素。

在 MATLAB 中,许多控制结构和定义需要 end 来明确定义它们的边界。这确保了代码结构良好且明确。需要 end 终止的结构包括 for、while、if/elseif/else、switch、try/catch 和 function。

data = [10, -5, 0, 8, -3];
for k = 1:length(data) % for 循环块的开始
if data(k) < 0 % if 语句块的开始
fprintf('Found a negative number at index %d.\n', k);
end % 终止 if 语句块
end % 终止 for 循环块

在简单的脚本文件中,end 对于函数有时是可选的,但在更结构化的场景中会变得强制性,以确保清晰性和正确的范围:

  • 嵌套函数:当您在一个函数内部定义另一个函数时,外部函数和内部函数都必须以 end 终止。
  • 局部函数:如果脚本文件或函数文件包含多个独立的函数(局部函数),则该文件中的每个函数都必须以 end 终止。
% parent_function.m
function output = parent_function(input)
% 这是主函数
temp = local_helper(input); % 调用局部函数
output = temp + 5;
end % 主函数必须使用 'end'
function result = local_helper(x)
% 这是同一文件中的局部函数
result = x * 2;
end % 局部函数必须使用 'end'

这是编写健壮且可读的代码的强大功能。end 可以用作数组索引,指代该维度上的最后一个元素。

% 创建一个示例向量
A = 10:10:100; % A = [10, 20, 30, ..., 100]
% 访问最后一个元素
last_el = A(end);
% 访问倒数第二个元素
second_to_last_el = A(end-1);
% 访问从第 5 个元素到末尾的范围
sub_vector = A(5:end);
disp(['Last element: ', num2str(last_el)]); % 输出: 100
disp(['Second-to-last element: ', num2str(second_to_last_el)]); % 输出: 90
disp('Sub-vector from 5th to end:'); % 输出: [50, 60, 70, 80, 90, 100]
disp(sub_vector);
% 创建一个 4x4 魔方矩阵
M = magic(4);
disp('Original Matrix:');
disp(M);
% 访问整个最后一行
last_row = M(end, :);
disp('Last Row:');
disp(last_row);
% 访问整个最后一列
last_col = M(:, end);
disp('Last Column:');
disp(last_col);
% 访问最后一行和最后一列中的元素
bottom_right_corner = M(end, end);
disp(['Bottom-Right Element: ', num2str(bottom_right_corner)]);
% --- 部分输出 ---
% Original Matrix:
% 16 2 3 13
% 5 11 10 8
% 9 7 6 12
% 4 14 15 1
% Last Row:
% 4 14 15 1
% Last Column:
% 13
% 8
% 12
% 1
% Bottom-Right Element: 1

最佳实践:使用 end 编写健壮的代码

Section titled “最佳实践:使用 end 编写健壮的代码”

使用 end 进行索引使您的代码更具动态性且不易出错。考虑一个需要处理输入数组的最后三个元素的函数。

% 脆弱、硬编码的方法
function process_brittle(arr)
len = length(arr);
subset = arr(len-2:len); % 如果 arr 的元素少于 3 个,则会失败!
disp(subset);
end
% 健壮、现代的方法
function process_robust(arr)
if numel(arr) >= 3
subset = arr(end-2:end);
disp(subset);
else
disp('Array is too small.');
end
end
process_robust([1, 2, 3, 4, 5]); % 正常工作
process_robust([10, 20]); % 优雅地处理

使用 end 的健壮方法更易读,并且与大小检查结合使用时,可以防止运行时错误,从而使您的代码更可靠。