跟踪MATLAB中文件夹/文件中引用函数的次数?

时间:2013-08-23 08:00:45

标签: matlab function refactoring dependencies

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

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

3 个答案:

答案 0 :(得分:6)

为此,我通常使用查找文件功能(可在屏幕顶部的菜单中找到)和'包含'选项。特别是如果你的函数名称与公共变量名称不匹配,那么这种方法非常有用。

只需在整个matlab路径中搜索,或在myFun(之类的特定目录中搜​​索,您将看到调用它的所有位置。在最坏的情况下,您还会找到一些不被调用的地方。

答案 1 :(得分: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函数(whichdir等)自动编译所有函数的列表,作为第一个参数传递给invdepfun

另见this post on File Exchange

答案 2 :(得分:2)

我不知道有任何内置的Matlab功能可以做到这一点,所以你可能需要编写一些函数来为你做这个。

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