一些引用代码简单地使用了 deal() 函数,比如

[a, b, c] = deal (1,2,3)

如文档( for Octavefor 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/

    10-12 19:32