如何将MATLAB addpath应用于非静态字符串?

时间:2016-03-28 22:07:50

标签: matlab

dir1 = '/tmp1';
dir2 = '/tmp2'

如果我们执行以下操作

addpath [dir1 dir2];

MATLAB采用' [dir1 dir2]'作为要添加的路径名。我们可以做以下

eval(sprintf(...
  'addpath %s;', ...
  [dir1  dir2]));

我想知道是否有更好的方法。谢谢,

2 个答案:

答案 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

如您所知,这会将directory1directory2添加到路径中。

这里发生的是MATLAB隐式地将所有输入转换为字符串并将它们传递给addpath函数。显式等价物是

addpath('directory1', 'directory2')

正如您所看到的,内部MATLAB调用addpath就像带有输入参数的普通函数一样,因此您可以传递变量而不是字符串文字:

dir1 = 'directory1';
dir2 = 'directory2';

addpath(dir1, dir2);

这就是您遇到以下问题的原因:

addpath [dir1 dir2]

因为,正如所写,[dir1 dir2]被转换为字符串(隐式),因为它是使用function parameter1 parameter2语法而不是显式函数语法传递的。

另外,要小心,因为[dir1, dir2]没有按照的想法做它。它实际上做了什么追加字符串dir1dir2并导致:

[dir1, dir2]
/tmp1/tmp2

如果 符合您的期望,那么请使用fullfile而不是基本的水平连接,以确保您拥有正确的文件分隔符等。

addpath(fullfile(dir1, dir2));

实际上,您会在许多MATLAB函数中看到隐式语法,它只接受字符串作为输入参数。但重要的是要知道,您可以始终使用显式函数调用function()代替传递可能存储在变量中的输入字符串。