3

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

[] = 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,那么有解决方法吗?

4

2 回答 2

10

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

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

该语法inArgs{:}将元胞数组中的所有值提取为逗号分隔的列表。因此,上述等价于:

foo(a,b,c);

如果foo写入接受可变长度参数列表,则varargin变量最终将成为一个 1×3 元胞数组,其中每个元素存储一个单独的输入参数。基本上,varargin看起来与变量完全inArgs一样。如果您的呼叫foo没有使用{:}运营商:

foo(inArgs);

那么varargin变量将是一个 1×1 元胞数组,其中第一个元素本身就是元胞数组inArgs。换句话说,foo只有 1 个输入(一个 1×3 元胞数组)。

于 2009-07-15T14:36:53.870 回答
0

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

如果您将 bar 强制转换为 form 的字符串"'var1', 'var2', 'var3'",您可以执行以下操作:

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

希望这能让你继续前进,对不起,这不是一个全面的答案。

于 2009-07-15T14:37:40.857 回答