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中带有函数名称的变量的警告的主要内容,如果未能解决你的问题,请参考以下文章