【发布时间】:2011-04-08 08:15:30
【问题描述】:
当 Matlab 解释器解释未在 .m 文件中实现的函数时,会发生运行时错误。有没有办法在“编译时”找到这些错误,即是否有一个脚本可以解析我的 matlab 代码,检查所有调用的函数并告诉我哪些 .m - 文件丢失(关于我定义的路径)?
【问题讨论】:
标签: matlab dependencies code-analysis
当 Matlab 解释器解释未在 .m 文件中实现的函数时,会发生运行时错误。有没有办法在“编译时”找到这些错误,即是否有一个脚本可以解析我的 matlab 代码,检查所有调用的函数并告诉我哪些 .m - 文件丢失(关于我定义的路径)?
【问题讨论】:
标签: matlab dependencies code-analysis
快速回答:没有。
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 文件带入和带出范围。这些原因共同导致这个问题的解决方案对于一般情况来说是不切实际的(甚至可能是不可能的)。
【讨论】: