在MATLAB中使用函数作为"常量"变量的偶尔会很方便.但是当我最近使用此功能时,我遇到了意外错误.当我在下面运行MWE时,Undefined function or variable 'a'.尽管功能在同一个文件中清晰可用,但我得到了错误.当我发表if声明时,错误消失了.这似乎暗示MATLAB预先解释a为变量,即使永远不会到达变量赋值行,忽略了存在同名函数的事实.这是一个MATLAB错误还是某种想要的行为?
这是MWE:
function matlabBugTest( )
if false
a = 'foo';
end
a
end
function b = a()
b = 'bar';
end
Run Code Online (Sandbox Code Playgroud)
我知道有意为变量和函数使用相同的名称似乎很奇怪,所以我将举例说明这可能有用.例如,您可能希望使用函数来存储某些常量(如文件路径),但也希望能够在找不到该函数时使用不同的值.这种情况可能如下:
if ~exist('pathConstant.m', 'file')
pathConstant = 'C:\some\path';
end
load(fullfile(pathConstant, 'filename.ext'));
Run Code Online (Sandbox Code Playgroud)
我知道语言设计决策通常是困难和复杂的,但MATLAB选择忽略同名函数的一个更不幸的后果是它破坏了函数和脚本/命令行之间的兼容性.例如,以下在脚本中运行时没有问题:
if false
a = 'foo';
end
a
Run Code Online (Sandbox Code Playgroud)
其中函数a(如上所示)保存在自己的文件中.