まつもと ゆきひろです.

In message "[ruby-list:2050] Re: ruby 1.0-970204 available"
    on 97/02/04, sinara / blade.nagaokaut.ac.jp <sinara / blade.nagaokaut.ac.jp> writes:
|原です。

|>   * Hash of hash/array: 結局Hashはid,Arrayは内容で見てます.
|
|そうでしたか。デフォルトをどうするかという事にすぎないけど、
|難しいところでしたね。

まあ,どちらに決めてもそうでない方が嬉しい使い方は存在するの
で難しいところでした.結局,Hashは対応表としてのアイデンティ
ティが重要で,内容はそれほどでもないだろうということで,id一
致にしました.Arrayは悩ましいところなんですけど,一応名前な
しの構造体として内容をキーとすることが多かろうとということで
内容一致にしました.

もっともHashやArrayをキーにするということはかなり例外的な状
況だと思いますので,どちらでも明確であれば良いということはい
えると思います.

|ところで、少し仕様が変わりました。

これはnilがObjectのサブクラスになったからです.昔のrubyでも
nilの代わりに1を代入しようとすれば同じエラーになります.これ
は,仕方がないところでしょうね.

もともとEnumerableはinclude元がeachを定義していることを要求
しますから,トップレベル(つまりObejct)にincludeしてはいけな
いものなんですね.

|#include Enumerable すると多重代入の意味が変わる事を
|#今日まで知りませんでした。

ちょっと解説すると多重代入の右辺が配列でない時,to_aメソッド
を使って配列に変換しようとします.で,Enumerableをincludeす
ると(eachがあるものと思って)eachを使って配列を生成するように
to_aを再定義します.普通のクラスはeachを定義していませんから,
エラーになるというわけです.

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