Issue #4541 has been updated by stomar (Marcus Stollsteimer). Regarding the OP's criticism of poor API documentation, this has in the meantime been improved (with issue #6680). From the current documentation for Array#slice: Negative indices count backward from the end of the array (-1 is the last element). For +start+ and +range+ cases the starting index is just before an element. Additionally, an empty array is returned when the starting index for an element range is at the end of the array. Returns +nil+ if the index (or starting index) are out of range. a = [ "a", "b", "c", "d", "e" ] a[2] + a[0] + a[1] #=> "cab" a[6] #=> nil a[1, 2] #=> [ "b", "c" ] a[1..3] #=> [ "b", "c", "d" ] a[4..7] #=> [ "e" ] a[6..10] #=> nil a[-3, 3] #=> [ "c", "d", "e" ] # special cases a[5] #=> nil a[6, 1] #=> nil a[5, 1] #=> [] a[5..10] #=> [] ---------------------------------------- Feature #4541: Inconsistent Array.slice() https://bugs.ruby-lang.org/issues/4541#change-34633 Author: kbl (Marcin Pietraszek) Status: Assigned Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: core Target version: next minor =begin Array slice/[] method is a bit inconsistent. Is it just poorly documented "feature" or a bug? In API doc I can't find this behaviour mentioned as a "special case". def test_array_slice array = ['a', 'b', 'c'] assert_equal nil, array[3] assert_eaual nil, array[4] assert_eaual [], array[3, 0] # assert_equal nil, array[4, 0] # [] expected (or both nils in array[3, 0] and array[4, 0]) assert_equal ['c'], array[2..2] assert_equal [], array[3..3] # assert_equal nil, array[4..4] # [] expected (or both nils in array[3..3] and array[4..4]) end Same behaviour can be reproduced on ruby 1.8.7 (2010-12-23 patchlevel 330) [x86_64-linux]. =end
on 2012-12-11 20:43
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.