Распаковка varargin к отдельным переменным

Я пишу обертку в функцию, которая берет 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

Кто-либо может думать о менее отвратительном способе сделать вещи?

5
задан Amro 19 June 2012 в 14:16
поделиться

1 ответ

Вместо этого вызов inner в outer должен быть

inner(varargin{:})

Другими словами, разверните varargin в список, разделенный запятыми, для вызова inner. Тогда вы сможете избежать всей этой неразберихи.

10
ответ дан 13 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: