6

私は 40 以上の関数を使用する大規模なプロジェクトを行っていますが、それは毎日増加しています。多くの場合、異なるスクリプトから関数を複数回参照します。ときどき、あるスクリプトの関数を編集する必要があることがわかりますが、その関数を別のスクリプトでも同じままにしておきたいという可能性があることに気付きます。明らかに、これ自体は問題ありません。新しい関数を書くことができます。しかし、すべてのスクリプトを含む大きなフォルダーの他の場所でその関数を参照したかどうかを覚えていないことがあります。

MATLAB で、関数がフォルダー内で使用された回数を何らかの方法で見つける方法はありますか? もしそうなら、それがどこから参照されているかを追跡する方法はありますか? 前もって感謝します=)。

4

3 に答える 3

6

このために、私は通常、ファイル検索機能 (画面上部のメニューにあります) と「含む」オプションを使用します。特に、関数名が共通変数名と一致しない場合、これは非常にうまく機能します。

matlab パス全体、または特定のディレクトリで検索するだけでmyFun(、それが呼び出されているすべての場所が表示されます。最悪の場合、呼び出されていない場所もあります。

于 2013-08-23T08:48:59.683 に答える
5

MATLAB は、関数を使用した依存関係の追跡をサポートしていdepfunます。depfun特定の機能を実行するために必要な他の機能を示します。

あなたが求めているのは反対の問題です:どの関数が特定の関数を必要としますか?

を使用depfunすると、逆引きができます。簡単な例を次に示します。

function result = invdepfun(allFunctions, lookFor)
% Return all functions that depend on a given function
%
% Example: invdepfun({'myfun1', 'myfun2', 'myfun3'}, 'myfun4') returns all of
% 'myfun1', 'myfun2', 'myfun3' that use 'myfun4'.

    filename = which(lookFor);

    result = {};
    for i = 1 : numel(allFunctions)
        deps = depfun(allFunctions{i}, '-quiet');
        if any(strcmpi(deps, filename))
            result{end + 1} = allFunctions{i};
        end
    end
end

他のさまざまな MATLAB 関数 ( which、など) を使用して、最初の引数としてdir渡すすべての関数のリストを自動的にコンパイルできます。invdepfun

File Exchange に関するこの投稿も参照してください。

于 2013-08-23T09:40:47.627 に答える
2

これを行う組み込みの Matlab 機能については知りません。そのため、おそらくこれを行う関数を作成する必要があります。

Matlab FileExchange のDIRWALK関数を使用して、プロジェクト フォルダーをクロールし、関数名を検索してすべての Matlab ファイルを調べることができます (whatコマンドを使用)。

于 2013-08-23T08:39:06.923 に答える