From: sinara@... Date: 1997-01-30T18:58:32+09:00 Subject: [ruby-list:1981] Re: [Dist] Mutex module 原です。 > まつもと ゆきひろです. > まず最初に確認すべきことは,内容で一致を取る場合,キーオブジェ > クトの内容が変更された場合にはそのキーは取り出せなくなる(要 > 素数としてはカウントされるし,イテレートもされるが,キーから > は取り出せないし削除もできない),ということです.これはドキュ > メントにも(ある程度)書いてあります. 内容一致の方はキーを失い安いけど、ハッシュを引く時はむしろ逆で すよね。 id の方は厳しい。やっぱり、 hash[ [0,1] ] = 1 p hash[ [0,1] ] # ==> nil という状況は避けたい気がする。 > その意味で,中身の変更されうるオブジェクトで内容をキーにする > のは危険です.文字列だけは特別扱いしてこの問題を回避していま > す(キーにされた文字列をコピーして freeze している). > > ですから,本当はStructも(内容が変更できるので),内容で一致を > 取るのは危ない部分もありますね. やっぱり食いかけたパンの値段が値段表に載ってないのは当たり前で は?ちょっと大きさの違うパンに値段がつかないのは表の定義が悪い。 パン一個一個に値段をつけるのはくど過ぎるのではないでしょうか? キーとキーと比較されるオブジェクトがごっちゃになってるなあ。 値段表としてサンプルに使ったパンに手をつけるべきでない、とい うべきか。(これは異論もあるでしょうね。) > これを踏まえて,以下のいずれが望ましいでしょう? > > (a) Hash/Arrayともidで一致を取る > (b) Hash/Arrayとも内容で一致を取る > (c) Hashはidで一致を取る/Arrayは内容で一致を取る > (d) Hashは内容で一致を取る/Arrayはidで一致を取る > (e) 上記以外のなにか(ってなに?) なんとなく (c)。Hash はオブジェクトではなく、関数だと割り切る。:-) Hash を Hash に入れたくなる様な例がほしい。