まつもと ゆきひろです.

In message "[ruby-list:1936] Re: [Dist] Mutex module"
    on 97/01/29, sinara / blade.nagaokaut.ac.jp <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で重複定義のチェックをするとか….

                                まつもと ゆきひろ /:|)