From: Ryuichiro Hara Date: 2003-06-19T14:46:18+09:00 Subject: [ruby-list:37801] 動的に生成したクラスメソッドのundef 動的に生成したメソッドを除く方法を知りたく質問します。 class A def initialize eval('def foo; "foo"; end') end def bar "bar" end # undef_method :foo #=> これはエラーになる # こもっともです。 end a = A.new a.methods.include? 'foo' #=> true このクラスのインスタンスレベルは、fooメソッドを持っているにもかか わらず、クラスAの定義の中ではエラーになります。まぁ、もっともな感 じはしますが。 でも、このような動的に生成したメソッドを何とか後から削除する方法は ないのでしょうか? 例えば一例、こんな場合です。 require 'cgi' require 'cgi/sesion' class MyCGI < CGI def initialize super "html4Tr" session = Session.new(self) end undef_method :fieldset #=> これはエラーになる # 気持ち、これをやりたい end cgi = MyCGI.new cgi = CGI::Session.new(cgi) p cgi.form() fieldsetメソッドがCGIクラスの中で動的に生成しますが、このfieldset という名のメソッドが定義されているか否かによってformブロック内に埋 め込まれるセッションIDを保持したhiddenフィールドの出力が変わります。 fieldsetが定義されているとMozillaで正しくレンダリングされない
...
を出力してしまいます。 で、これを削除したいわけですが、現状ではもとのcgi.rbをいじって対処 しています。コーディングで対処できるといいのですが、いい方法はない のでしょうか? -- はらりゅう