From: ts Date: 2002-12-15T20:27:35+09:00 Subject: Re: un-extending objects >>>>> "d" == dblack writes: d> # Object#stretch(aModule) -- extend only for duration of block d> class Object d> def stretch(mod) d> c = class << self; self; end d> before = methods d> extend(mod) d> yield d> (methods - before).each { |m| c.class_eval {undef_method(m)} } d> end d> end Nice, very nice :-))) pigeon% cat b.rb #!/usr/bin/ruby class Object def stretch(mod) c = class << self; self; end before = methods extend(mod) yield (methods - before).each { |m| c.class_eval {undef_method(m)} } end end class A def a puts "a" end end module M def a puts "b" end end a = A.new a.a a.stretch(M) { a.a } a.a pigeon% pigeon% b.rb a b b pigeon% Guy Decoux