[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 がそうだったからだと憶測しています。
この理由はかなりありそうですよね。そこはほんのりと同意。