在函数中加载变量时出现意外结果
如果有一个从 MAT 文件中加载数据的函数,但发现 MATLAB® 未返回预期的结果,请检查 MAT 文件中是否有任何变量与 MATLAB 函数具有相同的名称。与函数名称冲突的公共变量名称包括 i
、j
、mode
、char
、size
和 path
。
出现这些意外结果是因为在执行函数时,MATLAB 会在运行函数之前对函数中的所有代码进行预处理。但它不会对 load
的调用进行预处理,这意味着 MATLAB 对 MAT 文件中的变量并不知悉。因此,与 MATLAB 函数具有相同名称的变量被预处理为 MATLAB 函数,从而导致意外结果。这与脚本不同,MATLAB 会预处理脚本并逐行执行,类似于命令行窗口。
例如,以包含变量 height
、width
和 length
的 MAT 文件为例。如果将这些变量加载到诸如 findVolume
的函数中,则 MATLAB 会将对 length
的引用解释为对 MATLAB length
函数的调用,并返回错误。
function vol = findVolume(myfile) load(myfile); vol = height * width * length; end
使用长度时出错, 输入参量的数目不足。
为了避免冲突,在定义函数时,请选择下列一种或多种方法:
将变量加载到结构体数组中。例如:
function vol = findVolume(myfile) dims = load(myfile); vol = dims.height * dims.width * dims.length; end
在对
load
函数的调用中明确包括变量名称。例如:function vol = findVolume(myfile) load(myfile,'height','width','length') vol = height * width * length; end
在调用
load
之前,初始化函数中的变量。要初始化变量,请将其分配给空矩阵或空字符向量。例如:function vol = findVolume(myfile) height = []; width = []; length = []; load(myfile); vol = height * width * length;
要确定特定变量名称是否与 MATLAB 函数相关联,请使用 exist
函数。返回值 5 表示该名称是内置的 MATLAB 函数的名称。