Issue #8172 has been updated by sawa (Tsuyoshi Sawada).


=begin
In the above, I missed to say that there is no counterpart for (({Array#[]=})). There should be one for it as well, but I cannot think of a good method name.
=end

----------------------------------------
Feature #8172: IndexError-returning counterparts to destructive Array methods
https://bugs.ruby-lang.org/issues/8172#change-37955

Author: sawa (Tsuyoshi Sawada)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 


=begin
There are a few desctructive (({Array})) methods that take an index as an argument and silently insert (({nil})) if the index is out of range:

    a = []; a[1] = :foo; a # => [nil, :foo]
    [].insert(1, :foo) # => [nil, :foo]
    [].fill(:foo, 1, 1) # => [nil, :foo]

Among them, (({Array#[]})) has a counterpart that returns an (({IndexError})) when the index is out of range:

    [].fetch(1) # => IndexError

and this is useful to avoid bugs that would be difficult to find if (({Array#[]})) were used. However for (({Array#insert})) and (({Array#fill})), there are no such counterparts, and that fact that these methods silently insert (({nil})) is often the cause of a bug that is difficult to find. I suggest there should be some versions of these methods that return (({IndexError})) when index is out of range:

    [].insert!(1, :foo) # => IndexError
    [].fill!(:foo, 1, 1) # => IndexError

I believe this would make debugging easier.
=end


-- 
http://bugs.ruby-lang.org/