From: Urabe Shyouhei Date: 2007-08-21T09:48:41+09:00 Subject: [ruby-list:43883] Re: Hashへの生成順は保障されないのか? Tanaka Akira wrote: >> おお、田中さんを満足させる説明ってのは結構ハードル高そうだな。 > > えぇ、納得できません。 うーん、やっぱりか。 >> で、ArrayとHashってのは振舞いが少々似ている以上の共通点はな >> いわけです。つまり、統合する理由がない。Rubyの世界観において > > 統合する理由がないからといって、統合しない理由があることには > ならないでしょう。 そうですか? ArrayとHashは別の名前がついている別のデータ構造ですね。それ らの間に統合する理由が無いので、統合しないというだけだと思う のですが。 > 統合する理由がない、ということから統合するのがおかしいという > ことは導けません。統合する理由がないとしても、統合しない理由 > もないかもしれないからです。 統合する理由がなくて統合しない理由もないようなものは普通、統 合しない方に倒すと思います。違う例があれば教えてください。 > 違うものを違うクラスにするのはもっともなことです。問題は、 > Array と Hash がどう違うか、です。 > > 「振舞いが少々似ている」とのことですが、似ている点ではなくて、 > 違う点・相容れない点について具体的に主張していただけないでしょ > うか。 たとえばArrayのインスタンスaとHashのインスタンスhがあるとす ると、 a[x] (x >= 0) が存在すれば、少なくともa[0]からa[x]までのオブジェクトは存在 を仮定してよいはずです。ところがh[x]が存在してもそんな仮定は おけない。この点は違いますよね。 あるいはたとえばeachのブロック引数がいまだとHashとArrayでは 異なっているわけですが、統合するとなるとどちらに合わせるべき かは悩ましいところでしょう。each_with_indexはHash#eachとは挙 動が違うし。この点は明確に相容れないと言えます。 まあ、 > ちなみに、私は、Ruby で Array と Hash がわかれているのは、 > Perl がそうだったからだと憶測しています。 この理由はかなりありそうですよね。そこはほんのりと同意。