示例 1
将以下 MATLAB 代码保存在名为 average.m 的文件中:
function y = average(x)
% AVERAGE Mean of vector elements.
% AVERAGE(X), where X is a vector, is the mean of vector elements.
% Nonvector input results in an error.
check_inputs(x)
y = sum(x)/length(x); % The actual computation
function check_inputs(x)
[m,n] = size(x);
if (~((m == 1) || (n == 1)) || (m == 1 && n == 1))
error('AVG:NotAVector', 'Input must be a vector.')
end
现在运行函数。由于此函数需要向量输入,向其传递一个标量值可强制产生错误。错误发生在子例程 check_inputs 中:
average(200)
Error using average>check_inputs (line 11)
Input must be a vector.
Error in average (line 5)
check_inputs(x)
从 lasterror 获取以下三个字段:
err = lasterror
err =
message: [1x61 char]
identifier: 'AVG:NotAVector'
stack: [2x1 struct]
显示错误消息的文本:
msg = err.message
msg =
Error using average>check_inputs (line 11)
Input must be a vector.
显示包含 stack 信息的字段。err.stack 是 2×1 结构体,因为它提供有关失败子例程 check_inputs 以及外部主函数 average 的信息:
st1 = err.stack(1,1)
st1 =
file: 'd:\matlab_test\average.m'
name: 'check_inputs'
line: 11
st2 = err.stack(2,1)
st2 =
file: 'd:\matlab_test\average.m'
name: 'average'
line: 5
注意
主函数的名称通常应与包含此函数的文件的文件名相同。如果它们的名称不同,MATLAB 将使用 stack 结构体的 name 字段中的文件名。