Why are multiple, consecutive plusses allowable sy

2019-06-28 07:17发布

Does anyone know why this works in MATLAB?

>> 1 ++ 2
ans =
     3

Coming from coding in C, python, Java etc, I find it most counterintuitive that this should work at all. Presumably there's something important about the parser that I don't understand?

1条回答
乱世女痞
2楼-- · 2019-06-28 08:02

There's a difference between plus and uplus. I suspect MATLAB takes the first + as plus, and all the others as uplus. Since uplus is by default just "return what's behind", you add 1 and 2, and use a lot of "return what's behind" in between.

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

The reason uplus exists is to allow operator overloading in classes. The same works in other languages, e.g. in C#, to allow for operator overloading in confined classes.


The other reason mentioned in that C# thread is that is changes unsigned shorts to integers, which is not the case for MATLAB:

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

It does, however, convert a boolean to a double, thanks to Cris Lunego for pointing that out:

+true
ans =
     1
+false
ans =
     0

The following however remains a mystery to me, inspired by 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

The same works with multiple plusses, [1 +++..+++ 2], so with all plusses consecutively in the middle generates [1 2], all other combinations (as far as I tested) result in 3. I asked a separate question about this: Why do the plus and unary plus behave strange in array syntax?

查看更多
登录 后发表回答