在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
导致编译错误(我的意思是语法错误)。
答案 0 :(得分:1)
MATLAB的大部分语言语义,结构和功能都是设计决策的结果,这些决策将使语言更易于科学家和工程师掌握。由于历史/兼容性原因,其中一些功能已存在。类似地,人们也可以争论MATLAB使用括号()
进行函数调用以及索引这一事实,这对某些人来说可能是一个更有问题的选择。此外,您可以使用括号()
和花括号{}
索引单元格数组。
正如MathWorks website所述:
方括号启用数组构造和连接,创建空矩阵,删除数组元素以及捕获函数返回的值
请注意,MATLAB最初是作为矩阵库开发的,为LINPACK,EISPACK等提供包装器。因此,它只支持矩阵和多维数组。稍后引入单元以与其他(可能是双链表)数据结构(例如Java数组和.NET数组)建立良好的互操作性,并且当它们出现时,方括号[]
已经就位以便捕获返回函数的值。请注意,与单元数组相比,MATLAB矩阵的使用范围要广得多,并且从Mathcom的API一致性角度来看,使用[]
来捕获返回值更有意义。
另一方面,值得一提的是,带有结构化绑定的C ++ 17与MATLAB的路径相同,关于选择[]
超过{}
的主题存在很多争论。这也在SO here中讨论。