gpt4 book ai didi

function - 将 varargin 解包为单个变量

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:50 25 4
gpt4 key购买 nike

我正在为将 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 in outer 的调用应该改为

inner(varargin{:})

换句话说,将 varargin 扩展到以逗号分隔的列表中以调用 inner。然后你就可以避免所有的困惑。

关于function - 将 varargin 解包为单个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2476968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com