我正在为以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
请问有人能想到一种不太丑陋的做事方法吗?
最佳答案
内在外的调用应该改为
inner(varargin{:})
换句话说,将varargin扩展到以逗号分隔的列表中,以调用inner。然后,您可以避免所有困惑情况。