やすしです。

From: Ito Kazumitsu <ito / htk.hitachi-cable.co.jp>
Subject: [ruby-list:19778] Hash のデフォルト値について
Date: Tue, 21 Dec 1999 15:40:29 +0900

>   (1) Hash のデフォルト値が、new で指定したものでなく、
>       最後に行なった代入の値に変化してしまうように
>       見えますが、これはそういうものなのでしょうか。

ちゃんとデフォルトになってますよ。

> {"x"=>["x"]}
> ["x"]
> {"y"=>["x", "y"], "x"=>["x", "y"]}
> ["x", "y"]
> {"y"=>["x", "y", "z"], "z"=>["x", "y", "z"], "x"=>["x", "y", "z"]}
> ["x", "y", "z"]
> 19650904 19650904 19650904
  ^^^^^^^^^^^^^^^^^^^^^^^^^^
これが、defaultで入れた、empty arrayの object idです。同じでしょ?

>   (2) デフォルト値の設定を行なわない場合、異なるキーに
>       関連づけられたオブジェクトがすべて同一になって
>       しまいますが、これはそういうものなのでしょうか。

????

両方、defaultに [], empty array, を入れてる様に見えますが‥‥。
違いと言えば、

>   a1.default = []

ぐらいじゃないですか?
これがあるから、default の arrayが 新しい empty arrayに起き替えられて、

> {"y"=>["y"], "z"=>["z"], "x"=>["x"]}

と、なってますよ。

> 19649884 19649716 19649572

idも全部違うし。

# defaultは、Hash.new()の 括弧に入れるものですよね?
--
        yashi