我正在为一个函数编写一个包装器,该函数将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
我需要一个开箱的方法
瓦拉金
在外部函数中,我有一个单独变量的列表。有一种非常糟糕的方法可以做到这一点,即构造一个变量名的字符串来传递
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
有人能想出一种不那么可怕的做事方式吗?