まつもと ゆきひろです.
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で重複定義のチェックをするとか….
まつもと ゆきひろ /:|)