如何在八度中查找依赖函数

时间:2019-01-16 09:09:35

标签: octave

我想确定以八度运行特定功能所需的所有功能。我需要这个来部署用Octave编写的应用程序。 Matlab提供了一些工具来分析函数的依赖关系,但我找不到与Octave类似的东西。

按照matlab的建议尝试inmem不会产生预期的结果:

> inmem

warning: the 'inmem' function is not yet implemented in Octave

此问题是否还有其他解决方案?

2 个答案:

答案 0 :(得分:1)

首先,让我指出,根据您的描述,您所追求的 matlab 工具不是inmem,而是deprpt

第二,虽然octave对此没有内置工具,但您可以通过多种方法来执行此操作。我还没有亲自尝试过这些,所以,ymmv。

1)在使用探查器时运行功能,然后检查运行过程中使用的功能。如八度音阶档案中所建议:https://lists.gnu.org/archive/html/help-octave/2015-10/msg00135.html

2)github上有一些外部工具试图这样做,例如:

3)如果我必须自己进攻,我将按照以下方式解决问题:

  • 解析并标记涉及的m文件。 (可能还会使用isvarname之类的二进制检查来进一步过滤无用的令牌,然后再进行下一步。)
  • 对于每个令牌x,将“ help(x)”调用包装到try / catch块中
  • 检查错误,这将是以下之一:
    • “无效输入”(即令牌不是函数)
    • “未找到”(即无效的标识符等)
    • “未记录”(功能存在,但没有帮助字符串)
    • 没有错误,在这种情况下,您偶然发现了文件中的有效函数调用
  • 要进一步检查这些函数是内置函数还是已加载的软件包的一部分,您可以进一步解析“ help”输出的第一行,该行通常会告诉您该函数的来源。

如果这样做的上下文是您试图检查matlab脚本是否可以在八度音阶上工作,那么一个复杂的情况就是,在matlab代码中通常不存在需要八度音阶的软件包。再说一次,如果这是您的目标,那么您可能应该直接使用matlab的deprpt。

祝你好运。


PS。我可能会补充说,以上内容是用于创建通用工具等。就识别您自己的自己代码中的依赖而言,良好的软件工程实践在提供可维护代码和轻松解决您的依赖问题方面大有帮助用户。例如:-清楚地标识所需的软件包(与matlab不同,octave总是通过要求将这些软件包可见地加载到代码中来完成)–类似地,对于自定义依赖项,请考虑将它们包装并提供为软件包/名称空间,而不是分散的文件-如果无法打包依赖,则可以在文件中创建测试/检查,如果缺少必要的文件,则抛出错误,或者至少在文件本身的注释中提及此类依赖,等等。

答案 1 :(得分:0)

根据Octave Compatibility FAQ here

Q. inmem 
A. who -functions

您可以使用who -function。 (注意:我还没有尝试过。)