[prev in list] [next in list] [prev in thread] [next in thread]
List: ruby-core
Subject: Array#slice!() expands array inconsistently
From: Florian Gross <florgro () gmail ! com>
Date: 2007-06-15 14:02:30
Message-ID: 1181916148.639845.296730 () q66g2000hsg ! googlegroups ! com
[Download RAW message or body]
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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic