Skip to content

Style guide: misleading description for "Slicing with Ranges" #953

Open
@ak-lilw

Description

@ak-lilw

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions