ArrayとHashの非対称性

同じところ

両者とも、[]メソッドによる存在しないキーへの参照に対しては、nilを値として返す。

[1][1] #=> nil
{a: 1}[:b] #=> nil

またそのようなケースが望ましくなく、存在しないキーを渡した時に例外を上げたい場合には、fetchメソッドが使える。

[1].fetch(1) #=> (IndexError)
{a: 1}.fetch(:b) #=> (KeyError)

違うところ

Hashならば生成時に、[]メソッドによる存在しないキーへの参照に対し、nil以外の値をデフォルト値として指定することができる。

Hash.new(:void)[:b] #=> :void

一方、Arrayはそれが単純にできない。nil以外の値を返したければ、fetchメソッドの第二引数にそれを毎回指定しなければならない。

{a: 1}.fetch(:b, :void) #=> :void

fetchメソッドに関しては、Hashも同様に第二引数を指定可能だ。Hash.newでデフォルト値を指定しても、fetchに第二引数を設定すれば、後者が優先される。

Hash.new(:void).fetch(:b, :anothervoid) #=> :anothervoid

思うところ

何でArrayでデフォルト値の設定ができないのだろう?
Hash同様、fetchの第二引数を指定する方法はあるが、毎回指定するのでは「デフォルト値」= 「怠惰なケース」のとしての旨味が薄くなる。要は、すっきりしない。

具体的なケース挙げて、Array.newでデフォルト値を指定できるよう、仕様変更を引き出す人を所望します。