Question
I am working through Ruby Koans.
The test_the_shovel_operator_modifies_the_original_string
Koan in
about_strings.rb includes the following comment:
Ruby programmers tend to favor the shovel operator (<<) over the plus equals operator (+=) when building up strings. Why?
My guess is it involves speed, but I don't understand the action under the hood that would cause the shovel operator to be faster.
Would someone be able to please explain the details behind this preference?
Answer
Proof:
a = 'foo'
a.object_id #=> 2154889340
a << 'bar'
a.object_id #=> 2154889340
a += 'quux'
a.object_id #=> 2154742560
So <<
alters the original string rather than creating a new one. The reason
for this is that in ruby a += b
is syntactic shorthand for a = a + b
(the
same goes for the other <op>=
operators) which is an assignment. On the
other hand <<
is an alias of concat()
which alters the receiver in-place.