6

我有一个包含 40 多个功能的大型项目,而且每天都在增加。我经常从不同的脚本中多次引用一个函数。每隔一段时间,我就会发现我需要为一个脚本编辑一个函数,然后我意识到我可能希望该函数在另一个脚本中保持不变。显然这本身没有问题;我可以写一个新函数。但有时我不记得我是否在包含我所有脚本的较大文件夹中的其他任何地方引用了该函数!

MATLAB中有没有办法以某种方式找到一个函数在文件夹中使用次数的计数?如果是这样,有没有办法跟踪它被引用的地方?在此先感谢=)。

4

3 回答 3

6

为此,我通常使用带有“包含”选项的查找文件功能(在屏幕顶部的菜单中找到)。特别是如果您的函数名称与常用变量名称不匹配,这非常有效。

只需在整个 matlab 路径中搜索,或在特定目录中搜​​索类似的myFun(内容,您就会看到所有调用它的地方。在最坏的情况下,您还会发现一些没有调用它的地方。

于 2013-08-23T08:48:59.683 回答
5

MATLAB 使用该函数提供对依赖性跟踪的支持depfundepfun告诉您运行给定函数还需要哪些其他函数。

您要问的是相反的问题:哪些功能需要给定的功能?

使用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 函数(whichdir等)来自动编译所有要invdepfun作为第一个参数传递的函数的列表。

另请参阅文件交换上的这篇文章

于 2013-08-23T09:40:47.627 回答
2

我不知道有任何内置的 Matlab 功能可以做到这一点,因此您可能必须编写一些函数来为您执行此操作。

您可以使用 Matlab FileExchange 中的DIRWALK函数来抓取您的项目文件夹并查看所有 Matlab 文件(使用what命令)以搜索您的函数名称。

于 2013-08-23T08:39:06.923 回答