From: "Kroeger, Simon (ext)" Date: 2006-07-24T18:44:50+09:00 Subject: Re: I'll have the duck! > From: transfire@gmail.com [mailto:transfire@gmail.com] > Sent: Monday, July 24, 2006 1:10 AM > > [...] > Now anything that responded to #to_a could use #transform. > I'm not sure > how far this can be taken. Can classes be undone altogegther? But in > anycase, it seems very cool, and I wonder what kind of overall effect > it could have on coding? > > T. Like this *evil grin* ? (Ok, there are still classes...) ------------------------------------------------------------------------ ---- class Object def method_missing sym, *args @@ducks.select{|d| d.first == sym}.each do |duck| return send(duck[1], *args) if duck.last.all?{|i| respond_to? i} end super end def self.duck sym, real , *interface (@@ducks ||= []) << [sym, real, interface] end end def i_next_to_s succ.to_s end def f_next_to_s ceil.to_s end Object.duck :next_to_s, :i_next_to_s, :succ, :to_s Object.duck :next_to_s, :f_next_to_s, :ceil, :to_s p(41.next_to_s) #=> "42" p('A'.next_to_s) #=> "B" p(5.5.next_to_s) #=> "6" ------------------------------------------------------------------------ ---- cheers Simon