Почему множественные последовательные плюсы допустимы в MATLAB? - PullRequest
0 голосов
/ 28 сентября 2018

Кто-нибудь знает, почему это работает в MATLAB?

>> 1 ++ 2
ans =
     3

Исходя из кодирования на C, Python, Java и т. Д., Я считаю наиболее противоречивым, что это должно работать вообще.Предположительно в парсере есть что-то важное, чего я не понимаю?

1 Ответ

0 голосов
/ 28 сентября 2018

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

...