如何在八度音程中找到相关函数
How to find dependend functions in octave
我想确定 运行 八度音程中的特定函数所需的所有函数。我需要它来部署用 Octave 编写的应用程序。
虽然 Matlab 提供了一些工具来分析函数的依赖性,但我找不到与 Octave 类似的工具。
按照 matlab 中的建议尝试 inmem 未产生预期结果:
> inmem
warning: the 'inmem' function is not yet implemented in Octave
这个问题还有其他解决方案吗?
根据Octave Compatibility FAQ
here,
Q. inmem
A. who -functions
您可以使用 who -function
。 (注:我还没试过。)
首先,请允许我指出,根据您的描述,您要的 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 块的调用
- 检查错误,这将是以下之一:
- "Invalid input"(即令牌不是函数)
- "Not found"(即不是有效标识符等)
- "Not documented"(函数存在但没有帮助字符串)
- 没有错误,在这种情况下,您偶然发现了文件中的有效函数调用
- 要进一步检查这些是内置函数还是加载包的一部分,您可以进一步解析 "help" 输出的第一行,它通常会告诉您此函数的来源。
如果这样做的上下文是您正在尝试检查 matlab 脚本是否可以在八度音程上运行,那么一个复杂的问题是通常在八度音程上需要的包在 matlab 代码中不存在。再一次,如果这是你的目标,你可能应该直接使用来自 matlab 的 deprpt。
祝你好运。
PS。我可能会补充说,以上内容用于创建通用工具等。在识别 自己的 代码中的依赖项方面,良好的软件工程实践对提供可维护代码和轻松解决依赖项大有帮助为您的用户带来的问题。例如:——清楚地识别所需的包(与 matlab 不同,octave 通过要求在代码中可见地加载此类包来做到这一点)——类似地,对于自定义依赖项,考虑将它们包装并提供为包/名称空间,而不是分散的文件-- 如果无法打包依赖项,您可以在文件中创建测试/检查以在缺少必要文件时抛出错误,或者至少在文件本身的注释中提及此类依赖项等。
我想确定 运行 八度音程中的特定函数所需的所有函数。我需要它来部署用 Octave 编写的应用程序。 虽然 Matlab 提供了一些工具来分析函数的依赖性,但我找不到与 Octave 类似的工具。
按照 matlab 中的建议尝试 inmem 未产生预期结果:
> inmem
warning: the 'inmem' function is not yet implemented in Octave
这个问题还有其他解决方案吗?
根据Octave Compatibility FAQ
here,
Q. inmem
A. who -functions
您可以使用 who -function
。 (注:我还没试过。)
首先,请允许我指出,根据您的描述,您要的 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 块的调用
- 检查错误,这将是以下之一:
- "Invalid input"(即令牌不是函数)
- "Not found"(即不是有效标识符等)
- "Not documented"(函数存在但没有帮助字符串)
- 没有错误,在这种情况下,您偶然发现了文件中的有效函数调用
- 要进一步检查这些是内置函数还是加载包的一部分,您可以进一步解析 "help" 输出的第一行,它通常会告诉您此函数的来源。
如果这样做的上下文是您正在尝试检查 matlab 脚本是否可以在八度音程上运行,那么一个复杂的问题是通常在八度音程上需要的包在 matlab 代码中不存在。再一次,如果这是你的目标,你可能应该直接使用来自 matlab 的 deprpt。
祝你好运。
PS。我可能会补充说,以上内容用于创建通用工具等。在识别 自己的 代码中的依赖项方面,良好的软件工程实践对提供可维护代码和轻松解决依赖项大有帮助为您的用户带来的问题。例如:——清楚地识别所需的包(与 matlab 不同,octave 通过要求在代码中可见地加载此类包来做到这一点)——类似地,对于自定义依赖项,考虑将它们包装并提供为包/名称空间,而不是分散的文件-- 如果无法打包依赖项,您可以在文件中创建测试/检查以在缺少必要文件时抛出错误,或者至少在文件本身的注释中提及此类依赖项等。