e$BCf@n$H$$$$$^$9!#e(B
[ruby-dev:31761] e$B$G0lEY%l%]!<%H$7$?$N$G$9$,!“e(BArray e$B$N4pe(B
e$BK\E*$J$H$3$m$N%P%0$G=EMW$@$H;W$o$l$k$N$G!”$b$&0lEY>$7$/%le(B
e$B%]!<%H$7$^$9!#e(B
Array#slice! e$B$G!"Ii$NHO0O30$Ne(B index e$B$r;XDj$7$?>l9g!“Nce(B
e$B30$K$J$i$J$$$3$H$,$”$j$^$9!#e(B
trunk e$B$He(B 1.8 e$B$G:F8=$7$^$9!#e(B
e$B6qBNE*$K$O!"e(B
$ ./ruby -e ‘a = %w|a b c d e|; a.slice!(-3,2); p a’
[“a”, “b”, “e”]
$ ./ruby -e ‘a = %w|a b c d e|; a.slice!(-8,2); p a’
[“a”, “b”, “e”]
e$B$N$h$&$J>l9g$G$9!#e(B
e$B$3$N>l9g!"e(B-3 e$B$He(B -8 e$B$,F10l;k$5$l$F$7$^$C$F$$$^$9!#e(B
$ ./ruby -e ‘a = %w|a b c d e|; a.slice!(-13,2); p a’
-e:1:in slice!': index -8 out of array (IndexError) from -e:1:in
’
e$B$?$a$7$Ke(B -13 e$B$r;XDj$9$k$H!“e(Bindex -8 e$B$OHO0O30$@$He(B
e$B$$$&%(%i!<$K$J$k$N$G!”$I$3$+$Ge(B Array#size e$B$r8m$C$FB-$7e(B
e$B$F$7$^$C$F$$$k$3$H$,$o$+$j$^$9!#e(B
e$B%=!<%9$r8+$k$H!“e(Brb_ary_slice_bang e$B<+BN$H!”$=$3$+$i8F$s$G$$e(B
e$B$ke(B rb_ary_splice e$B$Ge(B2e$BEYB-$79~$s$G$7$^$C$F$$$k$h$&$G$9!#e(B
e$B0J2<$N%Q%C%A$G!"e(B
$ ./ruby -e ‘a = %w|a b c d e|; a.slice!(-3,2); p a’
[“a”, “b”, “e”]
$ ./ruby -e ‘a = %w|a b c d e|; a.slice!(-8,2); p a’
-e:1:in slice!': index -8 out of array (IndexError) from -e:1:in
’
e$B$H@5$7$/F0:n$9$k$3$H$r3NG’$7$^$7$?!#e(B
Index: array.c
— array.c (revision 14178)
+++ array.c (working copy)
@@ -1886,9 +1886,6 @@
pos = NUM2LONG(arg1);
len = NUM2LONG(arg2);
delete_pos_len:
- if (pos < 0) {
-
pos = RARRAY_LEN(ary) + pos;
- }
arg2 = rb_ary_subseq(ary, pos, len);
rb_ary_splice(ary, pos, len, Qundef); /* Qnil/rb_ary_new2(0) */
return arg2;