動的に生成したメソッドを除く方法を知りたく質問します。
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で正しくレンダリングされない
<FIELDSET>...</FIELDSET>を出力してしまいます。
で、これを削除したいわけですが、現状ではもとのcgi.rbをいじって対処
しています。コーディングで対処できるといいのですが、いい方法はない
のでしょうか?
--
はらりゅう