从变量读取的可变长度MATLAB参数

时间:2009-07-15 14:28:57

标签: matlab scripting variadic-functions

我有一个带有变量参数的函数,以标准方式声明:

[] = foo ( varargin )

我想从另一个函数调用它,但是以编程方式指定参数。我最好的尝试类似于以下内容:

% bar isn't populated like this, but this is how it ends up
bar = { 'var1' 'var2' 'var3' }; 
foo( bar );

但是,bar被放入1x1单元阵列中,并不像我预期的那样被解释为1x3单元阵列。我不能改变foo,所以有解决方法吗?

2 个答案:

答案 0 :(得分:10)

如果您想要在某处收集变量abc并最终将其作为一系列输入传递给函数,则可以执行以下操作:

inArgs = {a b c};  % Put values in a cell array
foo(inArgs{:});

语法inArgs{:}将单元格数组中的所有值提取为comma-separated list。因此,上述内容相当于:

foo(a,b,c);

如果foo被写为接受variable-length argument list,那么varargin变量最终将成为1乘3的单元格数组,其中每个元素都存储一个单独的输入参数。基本上,varargin会像变量inArgs一样完全。如果您对foo的来电未使用{:}运营商:

foo(inArgs);

然后varargin变量将是1乘1的单元格数组,其中第一个元素本身就是单元格数组inArgs。换句话说,foo只有1个输入(1乘3的单元格数组)。

答案 1 :(得分:0)

我所知道的唯一方法是使用eval,但我这里没有MATLAB,所以我无法正确检查语法。

如果您将该栏强制转换为"'var1', 'var2', 'var3'"形式的字符串,则可以执行以下操作:

eval(["foo(", barString, ")"])

希望能让你前进并抱歉这不是一个全面的答案。