Matlab 関数があり、その署名を変更 (つまり、パラメーターを追加) するとします。Matlab は「コンパイル」しないため、他のどの関数が正しい署名を使用していないか (つまり、追加のパラメーターを送信するか) を判断する簡単な方法があります。実行時にこれを判断したり (エラー メッセージを取得したり)、テキスト検索を実行したりしたくありません。これが理にかなっていることを願っています。どんなフィードバックでも大歓迎です。どうもありがとう。
2 に答える
私があなたを正しく理解していれば、関数の署名を変更し、それを「古い」方法で呼び出すすべての関数/スクリプト/クラスを見つけて、「新しい」方法に変更したいと考えています。
また、実行時に実行したくない、またはテキスト検索を実行したくないことも示されましたが、「解析時」に「正しくない」呼び出しを検出する方法がないため、これらの要求には選択肢がまったくないのではないかと思います古い関数呼び出しを検出...
その場合に私がすることは、一時的に数行を新しい関数に追加することです:
function myFunc(param1, param2, newParam) % <-- the NEW signature
if nargin == 2
clc, error('old call detected.'); end
次に、メインのスクリプト/関数/この関数が存在するものを実行します。何かが関数を間違って呼び出すたびに 1 つのエラーが発生し、Matlab コマンド ウィンドウにエラー スタックが表示されます。
次に、エラー スタックの下部にあるリンクをクリックし、関数呼び出しを修正し、エラーが発生しなくなるまで上から繰り返します。
完了したら、これらの行を削除することを忘れないでください。または、見逃したものをキャプチャするために単語error
をに置き換えてください。warning
いっそのこと: Linux を使用している場合、テキスト検索は問題になります。
$ grep -l 'myFunc(.*,.*); *.m'
これにより、「正しくない」呼び出しを持つすべてのファイルがリストされます。それほど難しいことではないと思います...おそらく、標準の Windows 検索でも同様のことができますが、今はテストできません。
これは多かれ少なかれ、依存関係レポートが発明された目的です。そのツールを使用すると、変更された関数を呼び出す関数/スクリプトを見つけることができます。次に、すべての発生を手動で検査するだけです。
ただし、下位互換性が維持されるように、関数シグネチャに変更を加えることをお勧めします。これを行うには、新しいパラメーターのデフォルト値を指定するかwarning
、これらのシナリオで a を発行します。そうすれば、コードが実行され、推奨されないコードの実行時のヒントが得られます (これは多かれ少なかれ、インタープリター/動的言語では必要悪です)。
多くの動的言語 (特に MATLAB) では、コードを実行するインタープリターなしでコードを完全に検査することは通常不可能です。次のコードを想像してみてください。
x = magic(10);
magic
一般に、関数が呼び出されると言えます。ただし、magic
まったく異なる関数にマップできます。これは、静的分析ツール (依存関係レポートなど) には見えない方法で行うことができますeval('magic = 1:100;');
。
唯一の方法は、すべてのコード ベースを手動で検査するか (テキスト検索で簡単に見つけることができます)、コード ベースを完全にカバーするテストを実行して、コード ベース全体を調べることです。
edit : ただし、MATLAB パーサーの中間出力にアクセスする方法があります。これには、文書化されておらず、サポートされていないmtree
関数 (t = mtree(file, '-file');
コード ベース内のすべてのファイルに対して次のように呼び出すことができます) を使用してアクセスできます。結果の構造を使用すると、特定の量のパラメーターを持つ呼び出しを見つけることができる場合があります。