【问题标题】:Programmatically return a list of all functions以编程方式返回所有函数的列表
【发布时间】:2019-01-27 06:36:14
【问题描述】:

我想以编程方式获取当前 MATLAB 命名空间中可用函数的列表,以及包中的可用函数。如何做到这一点?

【问题讨论】:

  • 我可能错了,但我相信 MATLAB 中的每个函数都需要在路径中关联一个 .m、.mex 或 .mex64 文件。您可以浏览path() 中的每个条目并找到所有此类文件。
  • @jodag:行得通。如果您将您的评论作为答案,我会接受。
  • This question 可能与您的问题有关。
  • My answer to that question ^ 包含列出所有已知函数和方法的代码,并展示了如何对+namespace 包执行相同操作。

标签: matlab function namespaces package metadata


【解决方案1】:

我们可以为此使用package metadata

pkgs = meta.package.getAllPackages();
% Or if the specific package name is known:
mp = meta.package.fromName('matlab')

在第 1st 案例中返回的元胞数组 pkgs 包含如下对象:

  package with properties:

                   Name: 'Sldv'
            Description: ''
    DetailedDescription: ''
              ClassList: [29×1 meta.class]
           FunctionList: [8×1 meta.method]
            PackageList: [9×1 meta.package]
      ContainingPackage: [0×0 meta.package]

所以剩下要做的就是遍历包和子包并收集它们的 FunctionList 条目。

我不知道如何获取属于“默认”命名空间的函数,除了解析function list doc page,例如使用Python APIBeautifulSoup

fl = arrayfun(@(x)string(x{1}.string.char), py.bs4.BeautifulSoup( ...
       fileread(fullfile(docroot,'matlab','functionlist-alpha.html')), ...
       'html.parser').find_all("code")).';

【讨论】:

【解决方案2】:

除了Dev-iL's answer,解析function list documentation web page 非常容易,因为Web 开发人员(当前)使用有用的“函数”类来标记每个函数名称!每个函数在 HTML 中如下所示:

<code class="function">accumarray</code>

所以我们可以使用urlread来抓取来源,使用正则表达式来剥离每个"function"类项的内部文本:

str = urlread('https://mathworks.com/help/matlab/functionlist-alpha.html');
funcs = regexp( str, '(?<="function">)[0-9A-Za-z.]+', 'match' );

注意:URL 中的“alpha”是“按字母顺序”而不是表示早期测试!

funcs 是一个包含该页面上所有函数名称的元胞数组。

上面使用的页面是最新的 MATLAB 版本。对于特定版本,请使用结构如下的历史文档页面:

https://mathworks.com/help/releases/R2017b/matlab/functionlist.html

【讨论】:

  • 简洁的答案,但我建议使用 webread 而不是 urlread (已弃用),您可以删除字符集中 . 的转义。
  • @UnbearableLightness webread 在我的快速测试中一直超时(20 秒),而 urlread 基本上是瞬时的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
  • 2011-07-17
  • 1970-01-01
  • 2020-01-30
  • 2020-03-19
  • 2018-03-02
相关资源
最近更新 更多