San*_*har 4 syntax matlab parsing abstract-syntax-tree
有谁知道为什么这在MATLAB中有效?
>> 1 ++ 2
ans =
3
Run Code Online (Sandbox Code Playgroud)
来自C,python,Java等编码,我觉得最有效的是它应该可以工作.据推测,解析器有一些重要的东西我不明白?
plus
和之间有区别uplus
.我怀疑MATLAB将第一个+
作为plus
,而所有其他作为uplus
.由于uplus
在默认情况下只"回归背后有什么",你加1
和2
,并且使用了大量的"回归背后有什么"之间.
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在数组语法中表现得很奇怪?