Project

General

Profile

Misc #16678

Array#values_at has unintuitive behavior when supplied a range starting with negative index

Added by prajjwal (Prajjwal Singh) 9 months ago. Updated 9 months ago.

Status:
Open
Priority:
Normal
Assignee:
-
[ruby-core:97391]

Description

Consider the following:

# frozen_string_literal: true

a = (1..5).to_a

p a.values_at(3..5) # => [4, 5, nil]
p a.values_at(-1..3)  # => []

When the range begins with a negative (-1, 0, 1, 2, 3), it returns an empty array, which surprised me because I was expecting [1, 2, 3, 4].

The argument for this is that it cold be confusing to allow this because the index -1 could refer to the last argument and it would be unintuitive to return an array [5, 1, 2, 3, 4] with jumbled values.

The argument against it is that it makes perfect sense to account for this case and return [nil, 1, 2, 3, 4].

Opening a dialog to see what others think of this.

Also available in: Atom PDF