dir1 = '/tmp1';
dir2 = '/tmp2'
如果我们执行以下操作
addpath [dir1 dir2];
MATLAB采用' [dir1 dir2]'作为要添加的路径名。我们可以做以下
eval(sprintf(...
'addpath %s;', ...
[dir1 dir2]));
我想知道是否有更好的方法。谢谢,
答案 0 :(得分:3)
实现目标的一种非常简单的方法是调用:
addpath(fullfile(dir1,dir2));
Fullfile将把字符串调整为正确的文件夹名称(在Windows和Unix下),如下所示:
fullfile('foo','bar') % returns foo/bar
fullfile('foo/','bar') % returns foo/bar
要递归添加文件,请执行以下操作:
pathsToAdd = genpath(fullfile(dir1,dir2));
addpath(pathsToAdd);
答案 1 :(得分:2)
您遇到的一般问题是MATLAB有两种调用命令的方法。第一个不使用显式函数调用function()
,而只是命令行上的多个输入由空格分隔:
addpath directory1 directory2
如您所知,这会将directory1
和directory2
添加到路径中。
这里发生的是MATLAB隐式地将所有输入转换为字符串并将它们传递给addpath
函数。显式等价物是
addpath('directory1', 'directory2')
正如您所看到的,内部MATLAB调用addpath
就像带有输入参数的普通函数一样,因此您可以传递变量而不是字符串文字:
dir1 = 'directory1';
dir2 = 'directory2';
addpath(dir1, dir2);
这就是您遇到以下问题的原因:
addpath [dir1 dir2]
因为,正如所写,[dir1 dir2]
被转换为字符串(隐式),因为它是使用function parameter1 parameter2
语法而不是显式函数语法传递的。
另外,要小心,因为[dir1, dir2]
没有按照的想法做它。它实际上做了什么追加字符串dir1
和dir2
并导致:
[dir1, dir2]
/tmp1/tmp2
如果 符合您的期望,那么请使用fullfile
而不是基本的水平连接,以确保您拥有正确的文件分隔符等。
addpath(fullfile(dir1, dir2));
实际上,您会在许多MATLAB函数中看到隐式语法,它只接受字符串作为输入参数。但重要的是要知道,您可以始终使用显式函数调用function()
代替传递可能存储在变量中的输入字符串。