From: "marcandre (Marc-Andre Lafortune)" Date: 2012-03-26T22:46:03+09:00 Subject: [ruby-core:43684] [ruby-trunk - Feature #6203] Array#values_at does not handle ranges with end index past the end of the array Issue #6203 has been updated by marcandre (Marc-Andre Lafortune). Hi, nobu (Nobuyoshi Nakada) wrote: > It's definitely not a bug. It's not? How do you explain: [1, 2, 3].values_at(2...42) # => [3] [1, 2, 3].values_at(2..41) # => [3, nil] I feel that both must return the same result. Moreover, the only acceptable results are either [3] or [3, nil, nil, ... nil] ---------------------------------------- Feature #6203: Array#values_at does not handle ranges with end index past the end of the array https://bugs.ruby-lang.org/issues/6203#change-25181 Author: ferrous26 (Mark Rada) Status: Open Priority: Normal Assignee: Category: core Target version: 1.9.3 =begin When I use Array#values_at I expect that it would be the same as successive calls to (({Array#[]})). There is one case where this does not hold: a = [0,1,2,3,4,5] a[4..6] # => [4, 5] a.values_at(4..6) # => [4,5,nil] I think this is an inconsistency in the design of (({Array#values_at})). We can look at a more extreme case: a[4..100] # => [4, 5] a.values_at 4..100 # => [4, 5, nil] And now it doesn't make any sense. I think the best solution would be to make (({Array#values_at})) be equivalent to successive calls to (({Array#[]})). I have patched (({rb_range_beg_len()})) to handle the extra case and opened a pull request on github. =end -- http://bugs.ruby-lang.org/