为什么MATLAB中多输出函数的定义使用括号而不是括号?

时间:2017-05-22 12:02:34

标签: matlab function

在MATLAB中,括号([])用于矩阵,其元素的类型相同。大括号({})用于单元格数组,其元素可以(通常也有)具有不同的类型。

但是,MATLAB中函数的定义使用括号:

function [A, B, C] = func(x, y, z)
    A = length(x) + 1i * length(y);
    B = zeros(size(y));
    C = int2str(z);
end

这里,A是复数,B是矩阵,C是字符串 为什么这样呢?为什么不支持这个:

function {A, B, C} = func(x, y, z)
    A = length(x) + 1i * length(y);
    B = zeros(size(y));
    C = int2str(z);
end

导致编译错误(我的意思是语法错误)。

1 个答案:

答案 0 :(得分:1)

MATLAB的大部分语言语义,结构和功能都是设计决策的结果,这些决策将使语言更易于科学家和工程师掌握。由于历史/兼容性原因,其中一些功能已存在。类似地,人们也可以争论MATLAB使用括号()进行函数调用以及索引这一事实,这对某些人来说可能是一个更有问题的选择。此外,您可以使用括号()和花括号{}索引单元格数组。

正如MathWorks website所述:

  

方括号启用数组构造和连接,创建空矩阵,删除数组元素以及捕获函数返回的值

请注意,MATLAB最初是作为矩阵库开发的,为LINPACK,EISPACK等提供包装器。因此,它只支持矩阵和多维数组。稍后引入单元以与其他(可能是双链表)数据结构(例如Java数组和.NET数组)建立良好的互操作性,并且当它们出现时,方括号[]已经就位以便捕获返回函数的值。请注意,与单元数组相比,MATLAB矩阵的使用范围要广得多,并且从Mathcom的API一致性角度来看,使用[]来捕获返回值更有意义。

另一方面,值得一提的是,带有结构化绑定的C ++ 17与MATLAB的路径相同,关于选择[]超过{}的主题存在很多争论。这也在SO here中讨论。