From: matz@... (Yukihiro Matsumoto) Date: 1997-02-05T11:36:47+09:00 Subject: [ruby-list:2054] Re: ruby 1.0-970204 available まつもと ゆきひろです. In message "[ruby-list:2050] Re: ruby 1.0-970204 available" on 97/02/04, 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を定義していませんから, エラーになるというわけです. まつもと ゆきひろ /:|)