Matlab中带有函数名称的变量的警告

Posted

技术标签:

【中文标题】Matlab中带有函数名称的变量的警告【英文标题】:Warning for variables with function names in Matlab 【发布时间】:2012-09-05 07:37:21 【问题描述】:

有时我不小心声明了具有函数名称的变量。

这是一个构造示例:

 max(4:5) % 5
 max(1:10)=10*ones(10,1); % oops, should be == instead  of = 
 max(4:5) % [10 10]

目前我总是很难找到这一点,尤其是我不经常使用的函数名称。

有什么方法可以让matlab对此给出警告吗?最好在屏幕右侧看到此内容以及其他警告,但我愿意接受其他建议。

【问题讨论】:

【参考方案1】:

由于 Matlab 允许您重载内置功能,因此在使用现有名称时不会收到任何警告。

不过,有一些技巧可以将现有函数重载的风险降到最低:

使用explicitFunctionNames。有函数maxIndex 而不是max 的可能性要小得多。

经常使用“Tab”键。 Matlab 将自动完成路径上的函数(以及您之前声明的变量)。因此,如果变量自动完成,它已经存在。如果您不记得它是否也是一个函数,请按“F1”以查看是否存在它的帮助页面。

使用函数而不是脚本,这样工作区中“错误”分配的变量就不会弄乱您的代码。

【讨论】:

制表符技巧确实是检查您要使用的单词是否“干净”的好方法。如果变量已经放在工作区中,它仍然可能会给出假阴性。 @DennisJaheruddin:使用函数而不是脚本可以解决这个问题。查看我的编辑。【参考方案2】:

我很确定 mlint 也可以检查这一点。

通常我会尽可能地将代码包装到函数中。这样,这种覆盖的 范围 被限制在函数的范围内 - 所以除了偶然的假设之外,没有持久的问题。

【讨论】:

我试图在 mlint 首选项中找到它,但没有成功。即使启用所有选项后,一个简单的测试文件仍然没有 mlint 警告:max=2:10;结果=最大值(3:4);是否有更高级的方法来更改不在首选项屏幕中的 mlint 设置? 我看到没有具体的警告。但有两个有助于识别此类问题:变量 已使用但可能未设置(脚本),第一次使用 max 时会发出警告。还有一个通常将结果存储在一个变量中,a = max(1:10)=10*ones(10,1) 将被标记为错误。 我想只有在我尝试在命令窗口中进行一些快速评估时才会困扰我。至少这条评论向我保证,它不可能潜入我的代码而不被注意到。【参考方案3】:

如有疑问,请检查:

exist max
ans = 
  5

查看help exist,您可以看到“max”是一个函数,不应作为变量赋值。

 >> help exist
exist  Check if variables or functions are defined.
exist('A') returns:
  0 if A does not exist
  1 if A is a variable in the workspace
  2 if A is an M-file on MATLAB's search path.  It also returns 2 when
       A is the full pathname to a file or when A is the name of an
       ordinary file on MATLAB's search path
  3 if A is a MEX-file on MATLAB's search path
  4 if A is a MDL-file on MATLAB's search path
  5 if A is a built-in MATLAB function
  6 if A is a P-file on MATLAB's search path
  7 if A is a directory
  8 if A is a class (exist returns 0 for Java classes if you
    start MATLAB with the -nojvm option.)

【讨论】:

如果我遇到一个奇怪的问题,我想这可以帮助我事后检查一些变量:停止程序,保存所有变量名的列表,清除所有变量,然后在所有变量上使用存在名字。但是,最好有一种方法可以在问题发生之前警告我。

以上是关于Matlab中带有函数名称的变量的警告的主要内容,如果未能解决你的问题,请参考以下文章

matlab 批量运算命名变量

python中带有下划线的变量和函数

将变量名转换为字符串 MATLAB

在 MATLAB 中使用回归函数时出现排名不足警告

Surf的MATLAB函数名

Matlab变量分支语句和循环语句