将varargin解压缩到各个变量

时间:2010-03-19 11:56:51

标签: function matlab arguments

我正在为一个以varargin作为输入的函数编写一个包装器。我想在包装器中保留函数签名,但嵌套varargin会导致所有变量被集中在一起。

function inner(varargin) %#ok<VANUS>
% An existing function
disp(nargin)
end

function outer(varargin)
% My wrapper
inner(varargin);
end

outer('foo', 1:3, {})   % Uh-oh, this is 1

我需要一种在外部函数中解包varargin的方法,以便我有一个单独的变量列表。有一种非常讨厌的方法是通过构造一串变量名来传递inner并调用eval

function outer2(varargin) %#ok<VANUS>
% My wrapper, second attempt
inputstr = '';
for i = 1:nargin
   inputstr = [inputstr 'varargin{' num2str(i) '}']; %#ok<AGROW>
   if i < nargin
      inputstr = [inputstr ', ']; %#ok<AGROW>
   end
end    
eval(['inner(' inputstr ')']);
end

outer2('foo', 1:3, {})   % 3, as it should be

有人能想到一种不那么可怕的做事方式吗?

1 个答案:

答案 0 :(得分:10)

外部内部的调用应该是

inner(varargin{:})

换句话说,将varargin扩展为逗号分隔列表以调用inner。然后你可以避免所有的混乱。