【问题标题】:Matlab - Locating file on a path that's inside packageMatlab - 在包内的路径上定位文件
【发布时间】:2012-05-25 09:15:50
【问题描述】:

一直在尝试(未成功)使用 'which' 来定位包内的 .m 文件。例如,当 Company.m 位于 +Contents 文件夹中时,调用“which('Company.m')”。

所以如果我当前的文件夹是 C:\Users\Documents\Contents(添加到 Matlab 路径的路径),“which('Company.m')”表示没有找到文件,但如果我当前的文件夹是 C:\Users ***\Documents\Contents\ +Contents,然后它就会知道位置。

这是为什么?我认为'which'命令递归搜索所有子目录?无论如何都可以检索“Company.m”的路径名而无需专门输入该文件夹?

【问题讨论】:

  • 是否有理由不使用Add to Path->Selected Folder *and Subfolders*,以便可以在路径上找到该函数?到那时,which 会做你想做的事。
  • 您不能将包添加到路径中。
  • 啊……那样的话,可以which('+Contents/Company.m')吗?还是您不提前知道您要查找的功能在哪个包中?
  • 我不一定知道它是否在一个包中(如果是,它在哪个包中)

标签: matlab


【解决方案1】:

应该是:

which Contents.Company

如果您事先不知道它驻留在哪个包中(或者即使它在一个包中),您可以将它们全部导入:

import Contents.*
import OtherPackage.*
which -all Company

如果您仍然不满意,您可以获取所有可用顶级包的列表,并搜索它们公开的方法以获得您想要的功能:

 %# warning: this might take more than a few seconds
 p = meta.package.getAllPackages;
 b = cellfun(@(pkg) ismember('Company',{pkg.FunctionList.Name}), p);
 idx = find(b, 1, 'first');
 p{idx}.Name

【讨论】:

    猜你喜欢
    • 2012-10-17
    • 2015-08-11
    • 1970-01-01
    • 2016-04-27
    • 2015-11-01
    • 2020-09-23
    • 2016-05-08
    • 2011-11-02
    • 1970-01-01
    相关资源
    最近更新 更多