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