为什么在 MATLAB 中允许使用多个连续的加号语法?

Why are multiple, consecutive plusses allowable syntax in MATLAB?

有谁知道为什么这在 MATLAB 中有效?

>> 1 ++ 2
ans =
     3

来自 C 语言的编码,python,Java 等,我发现这应该有效是最违反直觉的。大概有一些关于解析器的重要信息我不明白?

plus and uplus 有区别。我怀疑 MATLAB 将第一个 + 作为 plus,将所有其他的作为 uplus。由于 uplus 默认只是 "return what's behind",您添加 12,并在两者之间使用很多 "return what's behind"。

a=2;
c=+a % unitary plus
c =
     2
1+2 % addition
ans =
     3
1+++2 % addition and two uplusses
ans =
     3

uplus 存在的原因是允许 类 中的运算符重载。同样适用于其他语言,例如in C#,以允许运算符在受限 类.

中重载

该 C# 线程中提到的另一个原因是将无符号短整型更改为整数,而 MATLAB 并非如此:

d=uint8(1)
d =
  uint8
   1
+d
ans =
  uint8
   1
a=+d
a =
  uint8
   1

但是,它确实将布尔值转换为双精度值,感谢 指出:

+true
ans =
     1
+false
ans =
     0

然而,以下内容对我来说仍然是个谜,灵感来自

>> [1 ++ 2]
ans =
     1     2 % Two unary plusses
>> [1 + + 2]
ans =
     3 % A normal plus and a unary one
>> [1++2]
ans =
     3 % A normal plus and a unary one

同样适用于多个加号,[1 +++..+++ 2],因此所有加号在中间连续生成 [1 2],所有其他组合(据我测试)导致 3 .我问了一个关于这个的单独问题:Why do the plus and unary plus behave strange in array syntax?