gpt4 book ai didi

matlab - 如何使用 varargin 和 varargout 包装函数?

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

小例子:

function varargout = wrapper(varargin)
varargout = someFunction(varargin);

这就是我首先要做的。但是例如,如果 someFunction = ndgrid 这会产生一个 not defined for cell arrays 错误,所以下一次尝试使用 someFunction(varargin{:}) 代替。这是一个成功的调用,但是调用 [a,b] = wrapper([1,2], [3,4]) 不会产生与直接调用 ndgrid< 相同的结果,那我做错了什么?

最佳答案

其实,米哈伊尔的回答并不完全正确。如果 someFunction 是一个即使没有请求也返回值的函数,这就是函数指示应将值分配给 ans 的方式,Mikhail 的包装器将失败。例如,如果将 someFunction 替换为 sin 并且您将运行 wrapper 与直接运行 sin 进行比较,您会看到:

>> wrapper(0)
>> sin(0)

ans =

0

正确的做法是

function varargout = wrapper( varargin )
[varargout{1:nargout}] = someFunction( varargin{:} );

之所以可行,是因为 MATLAB 索引规则中有一个鲜为人知的边缘情况,该规则至少从 R2006a(可能更长)开始就针对这种情况存在。它是 MATLAB 索引中的一个缺陷,但被认为是处理此类事情所必需的。

规则是:

执行下标赋值时,如果

  • 下标赋值给一个未初始化的变量,并且
  • 未初始化的变量是花括号索引的,并且
  • 花括号中的索引为空,并且
  • 左侧出现在方括号内,AND
  • 右侧解析为一个值/返回一个输出

然后为未初始化的变量分配一个标量单元格,其中包含右侧返回的值。

例如:

>> clear uninit % just to make sure uninit is uninitialized
>> [uninit{[]}] = sin(0)

uninit =

[0]

关于matlab - 如何使用 varargin 和 varargout 包装函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4895556/

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