From: Tanaka Akira Date: 2007-08-21T06:05:56+09:00 Subject: [ruby-list:43877] Re: Hashへの生成順は保障されないのか? In article <46C9FA45.6090705@ruby-lang.org>, Urabe Shyouhei writes: > おお、田中さんを満足させる説明ってのは結構ハードル高そうだな。 えぇ、納得できません。 > ええと、基本的にRubyのクラス階層というのは振舞いが似てるから > という理由だけでサブクラスにしたり単一のクラスに統合したりは > しないように分けられているはずです。なんでかというと振舞いは > moduleとして取り出すことができるからです。たとえばStringと > ArrayはCレベルではほとんど同じ(配列のなかみがcharかVALUEかく > らいしか違わない)ですが、それらの共通の振舞いはEnumerableに > ごっそり分離されているため、RubyレベルではString < Arrayに > なったりもせず、あるいはStringがArrayに吸収されることもなく、 > 完全に関係ないクラスとしてそれぞれ存在しているわけですね。 module により、クラスを関連づける方向付けが弱くなっているの はそうでしょう。 > で、ArrayとHashってのは振舞いが少々似ている以上の共通点はな > いわけです。つまり、統合する理由がない。Rubyの世界観において 統合する理由がないからといって、統合しない理由があることには ならないでしょう。 > Arrayのような機能とHashのような機能を両方提供することにした > 場合に、「すべてがオブジェクト」という原則から考えてもクラス > を作らない方針はありえず、かといって上記のようにそれらを統合 > するのはおかしいので、結局現状のようにそれぞれ別のクラスにな > るというのが一番自然であるべき姿のはずです。 統合する理由がない、ということから統合するのがおかしいという ことは導けません。統合する理由がないとしても、統合しない理由 もないかもしれないからです。 > まとめると違うものは違うものとしてきちんと違うクラスにするの > がRubyのクラス階層の設計のはず。ArrayとHashが分かれてる意味 > はArrayとHashが違うものだからでしょう。 違うものを違うクラスにするのはもっともなことです。問題は、 Array と Hash がどう違うか、です。 「振舞いが少々似ている」とのことですが、似ている点ではなくて、 違う点・相容れない点について具体的に主張していただけないでしょ うか。 ちなみに、私は、Ruby で Array と Hash がわかれているのは、 Perl がそうだったからだと憶測しています。 -- [田中 哲][たなか あきら][Tanaka Akira]