Matlab函数签名更改

时间:2012-11-27 09:21:42

标签: matlab

让我们说我有一个Matlab函数,我改变了它的签名(即添加参数)。由于Matlab没有“编译”,因此有一种简单的方法可以确定哪些其他函数不使用正确的签名(即提交附加参数)。我不想在运行时确定这一点(即获取错误消息)或必须进行文本搜索。希望这是有道理的。任何反馈都将非常感激。非常感谢。

2 个答案:

答案 0 :(得分:3)

如果我理解正确,你想要改变一个函数的签名,找到所有以“旧”方式调用它的函数/脚本/类,并将其改为“新”方式。

您还表示您不想在运行时执行此操作,或进行文本搜索,但无法在“解析时”检测到“错误”调用,因此我担心这些要求不会有任何选择完全可以检测旧函数调用...

在这种情况下我会做的是暂时在新功能中添加几行:

function myFunc(param1, param2, newParam) % <-- the NEW signature

    if nargin == 2
        clc, error('old call detected.'); end

然后运行主脚本/函数/此函数所在的任何内容。每次错误地调用函数时都会出现一个错误,以及Matlab命令窗口中的错误堆栈。

然后点击错误堆栈底部的链接,更正函数调用,并从顶部重复直到不再发生错误。

不要忘记在完成后删除这些行,或者更好的是,将error替换为warning只是为了捕获任何遗漏的内容。

更好的是:如果您使用的是Linux,那么文本搜索将是

的问题
$ grep -l 'myFunc(.*,.*); *.m' 

将列出所有“错误”调用的文件。这不是太难我说...你可以用标准的Windows搜索做类似的事情,但我现在无法测试。

答案 1 :(得分:2)

这或多或少是dependency report的发明。使用该工具,您可以找到调用已更改函数的函数/脚本。然后,这只是一个手动检查每一个事件的问题。

但是,我建议您对功能签名进行更改,以保持向后兼容性。您可以通过在这些方案中指定新参数的默认值和/或发出warning来执行此操作。这样,您的代码就会运行,并且您将获得已弃用代码的运行时提示(这在解释/动态语言中或多或少是一种必要的恶意)。

对于许多动态语言(特别是MATLAB),如果没有解释器执行代码,通常不可能完全检查代码。想象一下下面这段代码:

x = magic(10);

通常,您会说调用magic函数。但是,magic可以映射到完全不同的功能。这可以以静态分析工具(例如依赖性报告)不可见的方式完成:例如, eval('magic = 1:100;');

唯一的方法是遍历整个代码库,手动检查每个事件(可以通过文本搜索轻松找到)或运行完全覆盖代码库的测试。

修改: 但是有一种方法可以访问MATLAB解析器的中间输出。这可以使用未记录且不受支持的mtree函数(对于代码库中的每个文件都可以这样调用:t = mtree(file, '-file');)来访问。使用生成的结构,您可以找到具有一定数量参数的调用。