一些引用代码简单地使用了 deal()
函数,比如
[a, b, c] = deal (1,2,3)
如文档( for Octave 和 for MATLAB )中所述,该函数只是将输入复制到输出。 为什么在这种情况下甚至在一般情况下使用
deal()
? 我正在尝试学习“更正确”的 MATLAB/Octave 用法,并想知道我是否遗漏了一些重要的东西。或许,这就是用法……a=1, b=2, c=3
这样的简单赋值或像 [a,b,c] = {1,2,3}{:}
那样更神秘的单元阵列列表解包,但比 Python argument unpacking 更受限制,就像在 this question 中一样? deal()
与复杂/可变参数一起使用? 我也理解单参数
[a,b,c]=deal(42)
但这本质上是 a=b=c=42
,并且 [a,b,c]=deal(x)
将 x
分配给所有,而不是元素的 x
给每个。或者也许只是我过度思考了这个函数的微不足道的使用。
最佳答案
我偶尔使用 deal
的一种非常有用的方法是创建返回多个输出参数的匿名函数。例如,
>> f = @(x) deal(x^2,x^3);
>> [a,b] = f(3)
a =
9
b =
27
编辑 因为人们似乎发现这种模式可能有用,请注意一个怪癖,因为您必须返回完整数量的输出。特别是不能使用
a = f(3)
,否则会出错。要仅检索单个输出,请使用 [a,~] = f(3)
或 [~,b] = f(3)
。用于抑制输出参数的 ~
语法从大约 R2007a 开始就出现了(恐怕我记不清是什么时候了) - 在旧版本中,您将需要始终返回两个输出。希望这可能对您有用。关于matlab - Octave/MATLAB 中的 deal() 函数有什么意义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24209662/