使用MATLAB执行文件或调用其文件放在另一个文件夹中的函数?

Nav*_*Nav 26 matlab

尝试谷歌搜索,但找不到任何东西.
我当前的MATLAB文件夹中有一些文件和文件夹.
其中一个文件夹称为"Map",它有一个'map1.m'文件,我想从当前MATLAB文件夹中的代码调用它.
在我的代码中,我不能这样称呼它:

/Map/map1;
Run Code Online (Sandbox Code Playgroud)

但我可以这样做:

cd Map;
map1;
cd ..;
Run Code Online (Sandbox Code Playgroud)

不知何故,上述方法似乎不正确.有更优雅的方式吗?

abc*_*bcd 39

您可以使用命令手动运行该文件而无需手动将文件夹添加到路径中,该run命令专门用于此类情况.从文档:

run是一个便捷函数,它运行当前不在路径上的脚本.

你将你的函数/脚本称为

run /Map/map1 
Run Code Online (Sandbox Code Playgroud)

如果只想输入其名称而不是完整(或相对)路径来运行函数/脚本,则应将该文件夹添加到路径中.

如@mutzmatron所述,您不能使用run输入/输出参数调用函数.因此,除非它是没有输入/输出参数的脚本/函数,否则使用run将无法工作,您必须将文件夹添加到路径中.


编辑

就像良好的编码实践一样,并且在您的功能具有输入/输出的情况下工作,从路径添加/删除文件夹是正确的方法.所以对于你的情况,

addpath /Map
...

map1;

...
rmpath /Map
Run Code Online (Sandbox Code Playgroud)

重要的是你的函数调用夹在addpathrmpath命令之间.如果你在两个文件夹中都有相同名称的功能,那么你应该把它夹得更紧,即之前的一行和之后的一行,以避免冲突.

  • 抱歉,添加和删除路径***不是***良好的编码实践。如果“Map”事先已经在路径上,它不会保留路径的状态。尽管如此,这仍然是完成本应简单的任务的唯一方法。我强烈赞成使用命名空间组织函数(@Andrew Janke 答案的最后一部分) (2认同)

And*_*nke 7

只需将所有这些目录添加到Matlab路径中,addpath就像gnovice建议的那样.然后,您将能够正常调用这些函数,并且它们对于哪些(),help(),depfun()以及其他Matlab元编程命令都是可见的.您可以将addpath()调用放入startup.m文件中,以便在每次启动Matlab时自动显示它们.

每次使用addpath/map1()/ rmpath更改路径都有一些缺点.

  • 这是一个性能损失,因为您正在为每个调用添加路径操作.
  • 不同目录中的函数将无法相互查看.
  • 编写和调试函数会更难,因为它们执行的路径上下文将动态更改,并且与您在编辑器和基础工作区中看到的内容不同.
  • 您需要其他错误处理代码,以确保在被调用函数出错时正确恢复路径.
  • 如果您想在某个时候部署此代码,则无法使用Matlab编译器.

使用run()或cd()本身很难看,因为相对路径会有问题.

如果你真的想要分离子目录中的函数,以便它们不能相互"看到",你可以通过在它们的名字前放一个"+"来创建那些目录命名空间,然后使用命名空间限定函数调用,喜欢Map.map1().