这个运营商在红宝石中做了什么? <&LT =

时间:2012-10-11 21:19:25

标签: ruby

我正在调试一些使用此运算符的代码,我不确定为何使用它。

它似乎将对象附加到数组。如果这就是我不知道工程师为什么不简单地使用'<<<<<<<<运营商。有什么区别?

谢谢!

2 个答案:

答案 0 :(得分:3)

http://www.tutorialspoint.com/ruby/ruby_operators.htm

它看起来像是一个按位左移操作和一个分配。

x <<= 2

相同
x = x << 2

答案 1 :(得分:3)

<<修改目标并非总是如此:它可能是重要的结果。请参阅API以了解用于行为的实际类型。

整数的位移不会产生副作用(除非分配/使用计算,否则计算将被丢弃):

a = 1
a << 2
a # => 1
a <<= 2
a # => 4

但是数组上的<< 会产生副作用(而<<=只会执行无用的分配 1 - 影响操作的性质):

b = [1]
b << 2
b # => [1,2]

1 在极少数情况下,可能“聪明”,访问者使用obj.prop <<= val进行副作用操作,因为它会调用 getter和setter - 而setter可能包含逻辑。但是,我在这里使用“聪明”这个词并不是“好”,原因是:)