From: matz@... (Yukihiro Matsumoto) Date: 1997-01-29T16:05:23+09:00 Subject: [ruby-list:1937] Re: [Dist] Mutex module まつもと ゆきひろです. In message "[ruby-list:1936] Re: [Dist] Mutex module" on 97/01/29, sinara@blade.nagaokaut.ac.jp writes: |原です。 |hash[key] == FALSE の場合もあるので、 | | if hash.include? key | |と書きましょう。(^^ おおっ! 確かに *^^* |この問題は継承にもあてはまりますね。ライブラリとして、いくつか |クラスを用意しておいて、それを継承して新しいクラスを作りたい時、 |メソッドを上書きしてしまうかもしれない。private 宣言である程度 |防ぐ方法はあるけど。 一般的にはスーパークラスの知識の元にサブクラスを作るでしょう から,こっちは(問題ではあるんですけど)深刻ではないのではない でしょうか? inlcudeについても,おそらくは同様でしょう. しかし,今回の石塚さんのもののように任意のオブジェクトに 性質を付加するタイプのものは困りますよね.唯一の対策は(なに もしないという以外には), module Mutexed def object_extended(obj) for must in [:lock, :unlock, ...] if obj.respond_to? must raise NameError, "method conflict" end end end ... end のような形でエラーにしちゃうことでしょうか. # object_extendedはextendした時に呼ばれるメソッドです. あとは -w optionで重複定義のチェックをするとか…. まつもと ゆきひろ /:|)