ruby-style-guide
ruby-style-guide copied to clipboard
Style guide: misleading description for "Slicing with Ranges"
In the style guide under Slicing with Ranges it's said that
[0..-1]inary[0..-1]is redundant and simply synonymous withary.
However, one makes a shallow copy while the other doesn't:
ary = [1, 2, 3]
with_slice = ary[0..-1]
without_slice = ary
ary[0] = :changed
# [1, 2, 3]
puts with_slice.inspect
# [:changed, 2, 3]
puts without_slice.inspect
By analogy to the Python idiom ary[:], I would guess that the "bad" form is often written specifically to make a copy rather than an alias.
I suggest that the advice be changed to say something like ary.clone, ary.dup or [*ary] is preferred (whatever is considered better style), or that simply ary is preferred if a copy isn't needed. If clone is a good alternative then it's worth adding that it isn't exactly synonymous with a full slice, since even ary.clone(freeze: false) clones the singleton class, whereas slicing doesn't.