From: Florian Gross Date: 2007-06-15T23:02:30+09:00 Subject: Array#slice!() expands array inconsistently Hi, I just stumbled upon this behaviour while specifying Array methods for Rubinius: irb(main):001:0> ary = [1, 2] => [1, 2] irb(main):002:0> ary.slice!(100) => nil irb(main):003:0> ary => [1, 2] irb(main):004:0> ary.slice!(100, 0) => nil irb(main):005:0> ary => [1, 2, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil] Is this intended behaviour? I'd expect .slice!() with an index and an index and a length to behave consistently. (I'd also expect Array#slice!() not to increase the size of the Array.) It also happens with a range, btw: irb(main):001:0> ary = [1, 2] => [1, 2] irb(main):002:0> ary.slice!(100...100) => nil irb(main):003:0> ary => [1, 2, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil] I'm seeing this in ruby 1.8.4 (2005-12-24) and ruby 1.9.0 (2007-04-02 patchlevel 0). The documentation says that is equivalent to this Ruby code: def slice!(*args) result = self[*args] self[*args] = nil result end If that were the case slice!(100) would also expand the Array. Kind regards, Florian Gross