MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   从变量读取可变长度的MATLAB参数 (https://www.labfans.com/bbs/showthread.php?t=22731)

poster 2019-12-10 16:49

从变量读取可变长度的MATLAB参数
 
我有一个带有可变参数的函数,以标准方式声明:

[] = 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{:}语法从单元格数组中提取所有值作为[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/br2js35-1.html"]逗号分隔的list[/URL] 。因此,以上等效于此:

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

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



[url=https://stackoverflow.com/questions/1131749]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 23:32

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.