Octave/MATLAB中的deal()函数有什么意义?

hoc*_*age 3 matlab octave

一些参考代码使用该功能deal(),如

[a, b, c] = deal (1,2,3)
Run Code Online (Sandbox Code Playgroud)

如文档中所述(对于OctaveMATLAB),该函数只是将输入复制到输出. 为什么deal()在这种情况下使用,甚至一般? 我正在尝试学习"更正确"的MATLAB/Octave用法,并想知道我是否遗漏了一些重要内容.也许,这是用法......

  • 传统的风格或惯用,代替简单的赋值,a=1, b=2, c=3或更像是神秘的列表 - 解包单元格数组[a,b,c] = {1,2,3}{:},但比Python 参数解包更受限制,就像这个问题一样
  • 对于一些更优雅的功能有用 - 例如,"深"与"浅"复制,如果这样的概念在这里存在,如果deal()用于复杂/可变参数?

我也理解单一论证,[a,b,c]=deal(42)但这基本上是a=b=c=42,并且[a,b,c]=deal(x)分配x给所有人,而不是x每个人的元素.

或者也许只是因为我过度思考这个功能的微不足道的使用.

Sam*_*rts 5

我偶尔使用的一种非常有用的方法deal是创建返回多个输出参数的匿名函数.例如,

>> f = @(x) deal(x^2,x^3);
>> [a,b] = f(3)
a =
     9
b =
    27
Run Code Online (Sandbox Code Playgroud)

编辑,因为人们似乎发现这种模式可能有用,请注意一个怪癖,因为你必须返回完整数量的输出.特别是,你不能使用a = f(3),否则会出错.要仅检索单个输出,请使用[a,~] = f(3)[~,b] = f(3).~抑制输出参数的语法已经存在,大概是R2007a左右(我恐怕不记得确切的时候) - 在旧版本中,你需要始终返回两个输出.希望对您有用.