ruby-style-guide icon indicating copy to clipboard operation
ruby-style-guide copied to clipboard

Style guide: misleading description for "Slicing with Ranges"

Open ak-lilw opened this issue 11 months ago • 0 comments

In the style guide under Slicing with Ranges it's said that

[0..-1] in ary[0..-1] is redundant and simply synonymous with ary.

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.

ak-lilw avatar Nov 21 '24 14:11 ak-lilw