Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork3.4k
Description
In the style guide underSlicing 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=aryary[0]=:changed# [1, 2, 3]putswith_slice.inspect# [:changed, 2, 3]putswithout_slice.inspect
By analogy to the Python idiomary[:]
, 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 likeary.clone
,ary.dup
or[*ary]
is preferred (whatever is considered better style), or that simplyary
is preferred if a copy isn't needed. Ifclone
is a good alternative then it's worth adding that it isn't exactly synonymous with a full slice, since evenary.clone(freeze: false)
clones the singleton class, whereas slicing doesn't.