【发布时间】:2014-06-13 16:09:08
【问题描述】:
一些参考代码使用了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 的元素。
或者也许只是我过度考虑了这个函数的琐碎使用。
【问题讨论】:
-
这是一个非常简单的函数,输入
edit deal并查看代码。您不需要交易,我从未使用过,也从未错过。 -
我猜你回答了你自己的问题。据我所知,除了可读性之外,没有其他理由使用
deal()。您提出的“深”与“浅”复制问题在这里(至少在 Octave 中)无关紧要,因为解释器足够聪明,可以检测何时需要将a = b实际复制到内存中。 -
C中有类似的函数吗?
-
@BrysonS。 -- C 中没有类似的函数,原因有几个。 MATLAB
deal函数接受各种输入(标量、逗号分隔列表、元胞数组、结构体数组访问器……),因此您必须执行类似tagged unions 的操作。或者你可以使用一些古怪的可变参数或 C++。多个输出值是一个问题,因此您必须返回数组、结构或指针,......但这似乎太复杂了。应用程序是什么?