From: Jim Freeze Date: 2006-03-11T22:25:08+09:00 Subject: Re: unextend ? Hi Have you tried #dup? % cat unextend module Actor def work "actor" end end module Waiter def work "waiter" end end class Human; end dirk = Human.new dirk.extend Actor p dirk.work begin dirk = dirk.dup p dirk.work rescue puts "dirk has no job" end dirk.extend Waiter p dirk.work % ruby unextend "actor" dirk has no job "waiter" And, to put it in the nice #unextend method: class Object def unextend self.replace dup end end module Actor def work "actor" end end module Waiter def work "waiter" end end class Human; end dirk = Human.new dirk.extend Actor p dirk.work begin dirk.unextend p dirk.work rescue puts "dirk has no job" end dirk.extend Waiter p dirk.work % ruby unextend "actor" dirk has no job "waiter" On Mar 9, 2006, at 10:03 AM, Dirk van Deun wrote: > A very short and simple question: is there a function to "unextend" an > object ? Obviously it does not exist under that name, nor could I > find > anything like it. It would be useful though to do "traits": > > dirk = Human.new > dirk.extend(actor) > dirk.work > if dirk.income < PITTANCE > dirk.unextend(actor) > dirk.extend(waiter) > dirk.work > end > > Dirk van Deun > -- > Ceterum censeo Redmond delendum > Jim Freeze