3

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

这是一个构造的示例:

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

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

有没有办法让matlab对此给出警告?最好在屏幕右侧看到这个和其他警告,但我愿意接受其他建议。

4

3 回答 3

3

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

但是,有一些技巧可以最大程度地降低现有函数过载的风险:

  • 使用explicitFunctionNames. 有一个函数maxIndex而不是max.

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

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

于 2012-09-12T11:55:58.663 回答
1

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

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

于 2012-09-12T13:31:38.177 回答
0

如有疑问,请检查:

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.)
于 2012-09-12T10:10:00.547 回答