From: "sawa (Tsuyoshi Sawada)" Date: 2013-03-27T11:55:43+09:00 Subject: [ruby-core:53762] [ruby-trunk - Feature #8172] IndexError-returning counterparts to destructive Array methods Issue #8172 has been updated by sawa (Tsuyoshi Sawada). =begin > Martin For clarification, I meant to have it return an error only in cases where (({nil})) needs to be inserted otherwise. So cases like the following should not return an error: a = [1, 2, 3]; a[3] = :foo; a # => (actually it should be a different method name) [1, 2, 3, :foo] [1, 2, 3].insert!(3, :foo) # => [1, 2, 3, :foo] [1, 2, 3].fill!(:foo, 3) # => [1, 2, 3, :foo] =end ---------------------------------------- Feature #8172: IndexError-returning counterparts to destructive Array methods https://bugs.ruby-lang.org/issues/8172#change-37960 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/