开发者

Unpacking varargin to individual variables

开发者 https://www.devze.com 2022-12-24 00:35 出处:网络
I\'m writing a wrapper to a function that takes varargin as its inputs.I want to preserve the function signature in the wrapper, but nesting varargin causes all the variable to be lumped toget开发者_S

I'm writing a wrapper to a function that takes varargin as its inputs. I want to preserve the function signature in the wrapper, but nesting varargin causes all the variable to be lumped toget开发者_StackOverflowher.

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

I need a way to unpack varargin in the outer function, so that I have a list of individual variables. There is a really nasty way to do this by constructing a string of the names of the variables to pass the inner, and calling 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

Can anyone think of a less hideous way of doing things, please?


The call in inner in outer should instead be

inner(varargin{:})

In other words, expand varargin into the comma-separated list for the call to inner. Then you can avoid all the mess.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号