小编tar*_*els的帖子

MATLAB错误?为函数和变量使用相同名称时出现"未定义的函数或变量"错误

在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(如上所示)保存在自己的文件中.

matlab scope function

8
推荐指数
1
解决办法
1592
查看次数

标签 统计

function ×1

matlab ×1

scope ×1