Существует разница между 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
существует для разрешения перегрузки операторов в классах.То же самое работает в других языках, например, в 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
Следующее, однако, остается для меня загадкой, вдохновленное комментарием Санджая Манохара :
>> [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
.Я задал отдельный вопрос по этому поводу: Почему плюс и унарный плюс ведут себя странно в синтаксисе массива?