まつもと ゆきひろです

In message "[ruby-list:26569] Re: Hash.new"
    on 00/12/17, Yasushi Shoji <yashi / yashi.com> writes:
|> 
|> 僕は用途が意味を決めるという立場なんですけど、[] による参照
|> のデフォルトって代入と組になってると思いませんか?
|
|ん〜、そかな。たとえば
|
|new([error_val])
|  空の新しいハッシュを生成します。error_valは参照時に使用したキーに対応
|  する値が存在しない時の戻り値です。
|
|に、なってたらだれも errorの時の値に代入しようとは思わないんじゃないでしょ
|うか?
|
|あたかも、「参照に使用した keyに対応する valueが無いときは、defaultを使
|用された keyの valueとして一緒に storeされます」みたく(想像できる様に)書
|いてあり、今までその様に使われてきたから問題になっているわけで。

私はこの意見と類似の印象を持っています。

今回の問題はデフォルト値が代入されないことだけが問題ではない
のだろうと思います。今度はきっと配列が共有されているので、
modifyしたら思わぬ変更が行われてしまったと、ひっかかる人が出
るでしょう。

そういう意味では、代入された方がより問題を悪化させるとも考え
られます。

たとえば、ブロックによるデフォルトならば、代入することに意味
があるのかもしれませんが、参照しただけでデフォルト値が追加さ
れることには反対です。

  ary =[]
  ary[1000]

だけで配列のサイズが拡大されてしまうような動作だと思います。

|# defaultは、freezeした方が良いのでわ…

した方が引っかかる人が少なくなる局面が多いことには同意します
が、できなくなることもあるのでやらないと思います。必要なら自
分でfreezeしてくださいということで。

                                まつもと ゆきひろ /:|)