On Aug 14, 2013, at 10:41 AM, alexeymuranov (Alexey Muranov) wrote: > The #<< operator does quite a different thing than either #merge or = #reverse_merge: >=20 > [1,2] << [3,4] #=3D> [1, 2, [3, 4]] Arrays are quite a different thing from Hashes, so it would not be = surprising for Array#<< to do quite a different thing than Hash#<<, but = the general concept in both cases is the same: "insert the operand into = the receiver". In the case of Array, the operand can be inserted as-is. In the case of Hash, the operand cannot be inserted as-is because it's = not clear whether to treat the operand as a key with a nil value (not = very useful for Hash) or as a value with an unspecified key (also not = useful for Hash). Instead, it does make sense to treat the operand to = Hash#<< as a collection of key/value pairs to be inserted, which makes = it very much like Hash#merge!. (All IMHO, of course.) Dave