From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1998-03-10T03:56:05+09:00 Subject: [ruby-dev:1628] Re: [BUG] String.dup けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :01625 ] the message: "[ruby-dev:1625] Re: [BUG] String.dup ", on Mar/10 00:39(JST) Shugo Maeda writes: >前田です。 >僕の場合、 > >superを呼べないようにするにはスーパークラスでundefしないといけない >→ そうすると当然スーパークラスでもそのメソッドが使えない >→ それは困る > >という思考パターンですぐにあきらめてしまいました(^^; むむ. なるほど... それはいえる(^^;;; >|(案2) メソッドそのものの属性として super_undefされているかどうかの状態 >| を持たせる. > >super_undefすると、super_undefを呼んだクラスからのみ、そのメソッドが見え >なくなるわけで、他の(そのメソッドを継承した)クラスからは見えるわけです >よね。 です. です. >ということは、メソッドの属性としてsuper_undefの情報を加えるには、その >メソッドをsuper_undefしたクラスのリストを持たせる必要があるのではない >でしょうか。 undefがやっている方法と同じことをすれば良いと思います. そのクラスのメ ソッドとして, super_undefされた(のフラグの立っている)メソッドを登録す れば良いでしょう. >|>undefにはsuper_undefの効果はありませんよね? >| >|効果はないのですが, 元々の用途は上位クラスで定義されているメソッドを見 >|えなくするための機能なので, undefをsuper_undefと再定義しても全然問題な >|いと思うのですが? > >僕は単純にundefは、そのクラスで、指定されたメソッドを未定義に >するものだと理解していました。 >実際undefは継承されたメソッドもそのクラスで定義されたメソッド >も区別せずに未定義にするわけですし、今のundefの機能をsuper_undef >と呼ぶのはちょっと抵抗があります。 というかですね. 今のundefが2つの機能を合わせ持っているというのが正しい んだと思います. 1. 上位のメソッドを隠す機能(super_undef) 2. そのクラスにあるメソッドを削除し, かつ(1)を行なう機能 (remove_method+super_undef) というわけで, super_undefの方がより原始的な機能を提供しているといえる と思います. でも, undefというのはちょっとおかしいですかね. uninheritとかですかね. __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---