这些更多的是猜测,而不是答案。
人们可以检查符号参考 http://www.mathworks.com/help/matlab/matlab_prog/symbol-reference.html并发现comma ,
可以用作
命令或语句分隔符
要在同一行输入多个 MATLAB 命令或语句,
用逗号分隔每个命令或语句:
for k = 1:10, sum(A(k)), end
在行
B = {1,2,3,}
因此之后的声明3
预计,只有}
, 意思是元胞数组末尾,有效的陈述。
The 分号;
官方有3种用法:
数组行分隔符
当在方括号内使用来创建新数组或连接时
现有数组,分号在数组中创建一个新行:
A = [5, 8; 3, 4]
输出抑制
当分号放在命令末尾时,分号告诉 MATLAB 不要
显示该命令的任何输出。在此示例中,MATLAB 不
显示生成的 100×100 矩阵:
A = ones(100, 100);
命令或语句分隔符
与逗号运算符一样,您可以在上输入多个 MATLAB 命令
用分号分隔每个命令的一行。 MATLAB 抑制
这些命令的输出以分号结尾,并显示
以逗号结尾的命令的输出。
在此示例中,对变量 A 和 C 的赋值终止于
分号,因此不显示。因为对B的赋值是
以逗号结尾,显示此命令的输出:
A = 12.5; B = 42.7, C = 1.25;
所以在行中
x = {1,2,3,;5,6,7}
它遵循有效的陈述数组行分隔符 after 3,
。之后预计会出现一个新的语句,在本例中是双精度语句5. Valid.
现在考虑这个案例
x = {1,2,3,;;;;4,5,6;;;}
如上之后3,
遵循声明数组行分隔符,之后的语句是想必 the 空语句 - NOP https://en.wikipedia.org/wiki/NOP借用了一些底层程序核心编写的C,这基本上意味着:没做什么。所以之后3,;
跟随三遍“没做什么”,在出现下一个语句之前。没有意义,正如 Matlab 告诉你的:额外的分号是不必要的。 - 但有效。
它还允许你做一些毫无意义的事情,比如:
if true
;
end
这是想必也是原因
C = {1,2,3,,,}
返回错误,因为逗号,
不是一个空语句,但在第一个逗号之后有一个预期的声明。
底线:它看起来很奇怪,但实际上对我来说似乎是逻辑的,因为 Matlab 在内部使用了大量的 C 代码,并且考虑到 null 语句,提到的所有内容都是有效的语法。
其他语言呢?
分号的用法就像x = [1,2,3,;;;;4,5,6;;;]
在 Python 中无效,即使在预期的 Matlab 克隆中也是如此numpy,除非包含在这种不常见的语法中a = np.matrix('1,2,3;4,5,6')
.
a = np.matrix('1,2,3,;;;;4,5,6;;;')
也会抛出一个错误,因为;
被解释为数组行分隔符无论如何,这都会让编译器抱怨行大小不一致。
然而,
x = [1,2,3,]
也是有效的语法Python
and IronPython
,正如它在VBScript
and Lua
如中提到的mlepage 的回答 https://stackoverflow.com/a/32853489/2605073。所有这些语言有什么共同点?它们(或多或少)都是在运行时解释的脚本语言。这不仅仅是Matlab。因此,OP 的兴奋仍然没有理由。