From: keiju@... (ÀÐÄͷ½¼ù ) Date: 1997-01-29T17:00:42+09:00 Subject: [ruby-list:1939] Re: [Dist] Mutex module けいじゅ@SHLジャパンです. In [ruby-list :01937 ] the message: "[ruby-list:1937] Re: [Dist] Mutex module ", on Jan/29 16:05(JST) matz@caelum.co.jp (Yukihiro Matsumoto) writes: >|原です。 >|hash[key] == FALSE の場合もあるので、 >| >| if hash.include? key >| >|と書きましょう。(^^ > >おおっ! 確かに *^^* 原さんは作者を越えましたね(^^;;; >|この問題は継承にもあてはまりますね。ライブラリとして、いくつか >|クラスを用意しておいて、それを継承して新しいクラスを作りたい時、 >|メソッドを上書きしてしまうかもしれない。private 宣言である程度 >|防ぐ方法はあるけど。 > >一般的にはスーパークラスの知識の元にサブクラスを作るでしょう >から,こっちは(問題ではあるんですけど)深刻ではないのではない >でしょうか? inlcudeについても,おそらくは同様でしょう. クラスの継承はまだいいのですが, モジュールが絡んでくると深刻ですよね. たとえば, モジュールが利用しているメソッドの名前がスパークラスのメソッ ド名と衝突しているときなどはどうしたら良いんでしょう? aliasでは対応で きませんよね? >しかし,今回の石塚さんのもののように任意のオブジェクトに >性質を付加するタイプのものは困りますよね.唯一の対策は(なに >もしないという以外には), > > 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を実行した後にメ ソッドが登録されるのでしょうか? 上記のプログラムを見ているとそのように なっていますね. __ ..........................................石塚 圭樹@SHLジャパン(株)... ------------->アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----