ruby 中的 += 和 =+ 有什么区别?”

what is the difference between += and =+ in ruby?"

+= 和 =+ 没有像我预期的那样工作。以下代码输出 @@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

我错过了什么?一旦调用该值,我希望两种情况下的输出相同。

没有=+这样的标记;它实际上是 two 标记:赋值后跟一元 + 运算符;后者本质上是一个空操作,所以 @@num_things =+ 1 等同于 @@num_things = 1.

由于有一个 += 标记,语言解析器会将其解析为单个标记。

(在作为 C 语言前身的 BCPL 的早期公式中,现代 -= 运算符被写为 =-。)

原因如下:

y += x 等同于 y = x + y+= 在 Ruby 中的工作方式与在许多其他编程语言中的工作方式一样。

y =+ x等同于y = +x等同于y = x。 Ruby 将 =+ 视为两个运算符,而不是一个。这也适用于 x 的负值。