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 に答える