matlab – 有没有办法找到缺少.m文件的引用函数?

当Matlab解释器解释未在.m文件中实现的函数时,会发生运行时错误.有没有办法在“编译时”找到这些错误,即是否有一个脚本解析我的matlab代码,检查所有被调用的函数并告诉我哪些.m文件丢失(关于我定义的路径)? 最佳答案 快速回答:没有.

Depfun本来是我作为这个问题的解决方案的第一个猜测,但它只给出了路径上存在的依赖项列表,而不是那些不存在的依赖项.同样,mlint和mlintmex对我来说并不像我希望的那样有用.

我相信其原因如下:函数调用和下标的语法在MATLAB中是相同的.

判断foo(bar)是否是对“foo.m”的函数调用或尝试下标到矩阵“foo”的唯一方法是执行到该点的代码,并查看矩阵“foo”存在于范围中和/或路径上是否存在foo.m.如果两者都存在,那么MATLAB的优先规则决定符号“foo”是作为函数调用还是作为下标操作处理.

在下面的玩具示例中,表达式“ambiguous(1:9)”首先被视为函数调用,然后作为下标操作:

function test

    disp( ambiguous( 1:9 ) )
    ambiguous = 'data item';
    disp( ambiguous( 1:9 ) )

end
function szMsg = ambiguous( anArgument )
    szMsg = 'function call';
end

也可以使用eval和evalin创建变量,并操纵MATLAB路径以将m文件带入和移出作用域.所有这些原因都使得对这个问题的解决方案对于一般情况来说是不切实际的(甚至可能是不可能的).

点赞