From: matz@... (Yukihiro Matsumoto) Date: 1997-01-29T15:14:16+09:00 Subject: [ruby-list:1935] Re: [Dist] Mutex module まつもと ゆきひろです. In message "[ruby-list:1934] Re: [Dist] Mutex module" on 97/01/29, 石塚圭樹 writes: | |けいじゅ@SHLジャパンです. |削除した要素に対して何か処理を行ないたいとすると, リターン値がなんであ |るか条件判断が必要になりますよね... | |hash.delete(key, if_none_block) if_exist_block | |のほうが良かったなあなんて思ったりもしています(*^^;;; うーん,なんでそんないちどにいろんなことをしようとするんです かね.Smalltalkerの性ですかね.これじゃぜんぜんdeleteじゃな いですよね(存在判定も同時にしている). rubyが遅いから? すみませんねえ. if hash[key] value = hash.delete(key) あった場合の処理 end 後処理 ではいけない理由がなにかあるんですね. |>|2. Hash#[], key?... | |>忘れていましたがもともと Hashのようなhash値の変わるオブジェ |>クトはキーにできないのでした.しかし,この場合にはhash値が変 |>わっていないので,これもきっとバグでしょう. | |うーん. Hashのhash値ってどういう風に定義されていたのだろう? 昔ですか? 全てのkeyと全てのvalueから計算していました.eql?が 導入される前のまま変更していなかったんですね. |ところで, Hashでの比較(eql?)が同一性(equal?)と違っているクラスは何があ |るんでしょうか? 以下の通りです.このうちいくつかは同一性に戻した方が良いかも 知れません(Array,Struct??). Array Bignum Float (Hash) String Struct Time |同値性で比較するハッシュ以外に同一性で比較するハッシュのクラスもあった |方が良いのでは?? ちなみにSmalltalkにはありました. 厳密にはそうかも知れませんが,それがないのがruby風だと感じて います.実際困ることはないと信じていますし. # なぜって同一性は処理系によって保証されていないので,それに # 依存するようなプログラムを書くためのハッシュは要らないはず |moduleは他のクラスにmix-inされるわけですよね. そうするとメソッド名の競 |合が当然起こり得ますよね. moduleの設計方針としてはこの競合をどのように |考えれば良いのでしょう? | |a. メソッド名の競合はinclude/extendした側で解消する. |b. モジュール側でそのような仕組みを用意しておく. 現状では辛かろうがなんだろうが,基本的にaです.bを実現するた めの仕組みがないからです.さて,いまのところbのような仕組み は思い付かないのですが,良いアイディアがありますか? # そういう仕組みのある言語というのも知らないなあ. まつもと ゆきひろ /:|)