登录论坛

查看完整版本 : 从变量读取可变长度的MATLAB参数


poster
2019-12-10, 16:49
我有一个带有可变参数的函数,以标准方式声明:

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


回答:
如果您要在某个地方收集变量a , b和c并最终将其作为一系列输入传递给函数,则可以执行以下操作:

inArgs = {abc}; % Put values in a cell array foo(inArgs{:}); inArgs{:}语法从单元格数组中提取所有值作为逗号分隔的list (http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/br2js35-1.html) 。因此,以上等效于此:

foo(a,b,c); 如果将foo编写为接受可变长度的参数列表 (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/varargin.html) ,则varargin变量最终将是一个1×3单元格数组,其中每个元素都存储一个单独的输入参数。基本上, varargin看起来与变量inArgs 完全一样。如果您对foo的调用未使用{:}运算符:

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



更多&回答... (https://stackoverflow.com/questions/1131749)