有人知道为什么它可以在MATLAB中工作吗?
>> 1 ++ 2
ans =
3
来自使用C,python,Java等进行编码的方法,我发现这完全可以反常觉。大概解析器有一些我不了解的重要内容?
答案 0 :(得分:6)
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
存在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?