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

San*_*har 4 syntax matlab parsing abstract-syntax-tree

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

>> 1 ++ 2
ans =
     3
Run Code Online (Sandbox Code Playgroud)

来自C,python,Java等编码,我觉得最有效的是它应该可以工作.据推测,解析器有一些重要的东西我不明白?

Adr*_*aan 6

plus和之间有区别uplus.我怀疑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
Run Code Online (Sandbox Code Playgroud)

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


C#线程中提到的另一个原因是将unsigned short更改为整数,而MATLAB则不是这样:

d=uint8(1)
d =
  uint8
   1
+d
ans =
  uint8
   1
a=+d
a =
  uint8
   1
Run Code Online (Sandbox Code Playgroud)

然而,它确实将布尔值转换为double,这要感谢Cris Lunego指出:

+true
ans =
     1
+false
ans =
     0
Run Code Online (Sandbox Code Playgroud)

然而,在Sanjay Manohar的评论的启发下,以下对我来说仍然是一个谜:

>> [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
Run Code Online (Sandbox Code Playgroud)

同样适用于多个加号[1 +++..+++ 2],因此在中间连续生成[1 2]所有加号时,所有其他组合(据我测试)都会产生3.我问了一个单独的问题:为什么plus和unary plus在数组语法中表现得很奇怪?

  • 对于那些感兴趣的人:Unarticulated plus还将布尔值转换为double:`+ true`是`1.0`(尽管转换也会在任何其他算术上下文中发生). (2认同)