Я пишу оболочку для функции, которая принимает 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
Кто-нибудь может подумать о менее отвратительном способе ведения дел, пожалуйста?