Open
Description
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.
Metadata
Metadata
Assignees
Labels
No labels