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

时间:2018-09-28 12:47:53

标签: matlab parsing syntax abstract-syntax-tree

有人知道为什么它可以在MATLAB中工作吗?

>> 1 ++ 2
ans =
     3

来自使用C,python,Java等进行编码的方法,我发现这完全可以反常觉。大概解析器有一些我不了解的重要内容?

1 个答案:

答案 0 :(得分:6)

plusuplus之间是有区别的。我怀疑MATLAB将第一个+用作plus,而所有其他uplus。由于默认情况下uplus只是“返回后面的内容”,因此您添加了12,并在两者之间使用了很多“返回后面的内容”。

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

但是,它确实将布尔型转换为双精度型,这要感谢Cris Lunego指出了这一点:

+true
ans =
     1
+false
ans =
     0

但是,受Sanjay Manohar's comment的启发,以下内容对我来说仍然是个谜:

>> [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?