尝试Googling,但找不到任何东西
我当前的MATLAB文件夹中有一些文件和文件夹
其中一个文件夹称为“Map”,它有一个'map1.m'文件,我想从当前MATLAB文件夹中的代码中调用它。
在我的代码中,我不能这样称呼它:
/Map/map1;
但我可以这样做:
cd Map;
map1;
cd ..;
不知何故,上述方法似乎不正确。有更优雅的方式吗?
答案 0 :(得分:38)
您可以使用run
命令运行文件,而无需手动将文件夹添加到路径中,该命令专门用于此类情况。来自文档:
run是一个便捷函数,可以运行当前不在路径上的脚本。
您将功能/脚本称为
run /Map/map1
如果您只想输入其名称而不是完整(或相对)路径来运行函数/脚本,则应将该文件夹添加到路径中。
如@mutzmatron所述,您不能使用run
来调用具有输入/输出参数的函数。因此,除非它是没有输入/输出参数的脚本/函数,否则使用run
将无效,您必须将文件夹添加到路径中。
就像良好的编码习惯一样,并且在您的功能具有输入/输出的情况下工作,从路径添加/删除文件夹是正确的方法。所以对于你的情况,
addpath /Map
...
map1;
...
rmpath /Map
重要的是你的函数调用夹在addpath
和rmpath
命令之间。如果你在两个文件夹中都有相同名称的功能,那么你应该把它夹得更紧,即前一行和后一行,以避免冲突。
答案 1 :(得分:7)
只需将所有这些目录添加到带有addpath
的Matlab路径,就像gnovice建议的那样。然后,您将能够正常调用这些函数,并且它们对于(),help(),depfun()和其他Matlab元编程命令都是可见的。您可以在addpath()
文件中添加startup.m
次调用,以便在每次启动Matlab时自动显示这些调用。
每次使用addpath / map1()/ rmpath更改路径都有一些缺点。
使用run()或cd()本身很难看,因为相对路径会有问题。
如果你真的想要将子目录中的函数分开,以便它们不能相互“看到”,你可以通过在它们的名字前放一个“+”来使那些目录命名空间,然后使用它来限定函数调用。命名空间,如Map.map1()
。
答案 2 :(得分:0)
只是为改变路径的辩论做出贡献......
让它变得更安全的一种方法"是写
% start of my code: create function handles
% to the functions I need:
try
cd Map
map1_func = @map1;
catch mexception
end
cd ..
这会尝试保留当前目录,并在另一个目录中获取该函数的句柄。
唯一的问题是,如果map1
依赖于Map
目录中的其他功能,则此方法不会工作。