Main Content

在函数中加载变量时出现意外结果

如果有一个从 MAT 文件中加载数据的函数,但发现 MATLAB® 未返回预期的结果,请检查 MAT 文件中是否有任何变量与 MATLAB 函数具有相同的名称。与函数名称冲突的公共变量名称包括 ijmodecharsizepath

出现这些意外结果是因为在执行函数时,MATLAB 会在运行函数之前对函数中的所有代码进行预处理。但它不会对 load 的调用进行预处理,这意味着 MATLAB 对 MAT 文件中的变量并不知悉。因此,与 MATLAB 函数具有相同名称的变量被预处理为 MATLAB 函数,从而导致意外结果。这与脚本不同,MATLAB 会预处理脚本并逐行执行,类似于命令行窗口。

例如,以包含变量 heightwidthlength 的 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 函数的名称。

另请参阅

相关主题