Project

General

Profile

Actions

Feature #8172

open

IndexError-returning counterparts to destructive Array methods

Added by sawa (Tsuyoshi Sawada) over 8 years ago. Updated over 1 year ago.

Status:
Feedback
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:53755]

Description

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.

Actions

Also available in: Atom PDF