Function 将varargin解包为单个变量
我正在为一个函数编写一个包装器,该函数将varargin作为其输入。我想在包装器中保留函数签名,但是嵌套Function 将varargin解包为单个变量,function,matlab,arguments,Function,Matlab,Arguments,我正在为一个函数编写一个包装器,该函数将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,
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(varargin{:})
换句话说,将varargin扩展到逗号分隔的列表中,以调用内部。这样就可以避免所有的混乱。出于好奇,有没有一种等效的数组分割方法?就像一个更好的
c=arrayfun(@(x)x,1:3,'UniformOutput',false);c{:}
。不确定它是否更好,但您可能可以使用cell2mat的变体。arrayfun怎么了,神秘的?如果预先分配输出,也可以使用for循环。我认为对于大小合理的阵列来说,性能不是一个大问题。
inner(varargin{:})