в чем разница между + = и = + в рубине? - PullRequest
0 голосов
/ 30 мая 2018

+ = и = + не работает, как я ожидал.Следующий код выводит правильное значение для @@ num_things.

   class Thing
     @@num_things = 0 # class variable

     def initialize()
       @@num_things += 1 # increment @@num_things
     end

     def value
       @@num_things
     end

   end

   t1 =Thing.new()
   puts t1.value
   t2 =Thing.new()
   puts t2.value
   t3 =Thing.new()
   puts t3.value

Вывод:

   1
   2
   3

Однако, если вы инвертируете выражение из + = в = =, теперьвывод становится

   1
   1
   1

Чего мне не хватает?Я ожидаю, что результат будет одинаковым в обоих случаях после вызова значения.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Вот почему:

y += x совпадает с y = x + y.+= работает в Ruby, как и во многих других языках программирования.

y =+ x - это то же самое, что y = +x - то же самое, что и y = x.Ruby видит =+ как два оператора, а не как один.Это также верно для отрицательных значений x.

0 голосов
/ 30 мая 2018

Нет такого токена, как =+;на самом деле это два токена: присваивание с последующим унарным оператором +;последний по сути не используется, поэтому @@num_things =+ 1 эквивалентно @@num_things = 1.

Поскольку существует токен +=, анализатор языка будет анализировать его как один токен.

(В ранних формулировках BCPL, предшествовавших C, современный оператор -= был записан как =-.)

...