おお、田中さんを満足させる説明ってのは結構ハードル高そうだな。 ええと、基本的にRubyのクラス階層というのは振舞いが似てるから という理由だけでサブクラスにしたり単一のクラスに統合したりは しないように分けられているはずです。なんでかというと振舞いは moduleとして取り出すことができるからです。たとえばStringと ArrayはCレベルではほとんど同じ(配列のなかみがcharかVALUEかく らいしか違わない)ですが、それらの共通の振舞いはEnumerableに ごっそり分離されているため、RubyレベルではString < Arrayに なったりもせず、あるいはStringがArrayに吸収されることもなく、 完全に関係ないクラスとしてそれぞれ存在しているわけですね。 で、ArrayとHashってのは振舞いが少々似ている以上の共通点はな いわけです。つまり、統合する理由がない。Rubyの世界観において Arrayのような機能とHashのような機能を両方提供することにした 場合に、「すべてがオブジェクト」という原則から考えてもクラス を作らない方針はありえず、かといって上記のようにそれらを統合 するのはおかしいので、結局現状のようにそれぞれ別のクラスにな るというのが一番自然であるべき姿のはずです。 まとめると違うものは違うものとしてきちんと違うクラスにするの がRubyのクラス階層の設計のはず。ArrayとHashが分かれてる意味 はArrayとHashが違うものだからでしょう。