From: Robert Klemme Date: 2005-07-07T22:25:47+09:00 Subject: Re: Inheriting Array and slice() behaviour James Edward Gray II wrote: > On Jul 7, 2005, at 2:40 AM, Robert Klemme wrote: > >> Yep. Or do it selectively (what I'd prefer). This can help: >> >> class Module >> def delegate(member, method) >> class_eval "def #{method}(*a,&b) @#{member}.#{method}(*a,&b) end" >> end >> end >> >> >>>> class Foo >>>> def initialize() @s = "foo" end >>>> >>>> >>> delegate :s, :size >> >>>> end >>>> >> "def size(*a,&b) @s.size(*a,&b) end" >> => nil >> >>>> Foo.new.size >>>> >> => 3 >> >> Btw, IMHO this would be a good addition to delegate.rb. What do >> others >> think? > > This is what the standard Forwardable library does: > > class Queue > extend Forwardable > > def initialize > @q = [ ] # prepare delegate object > end > > # setup prefered interface, enq() and deq()... > def_delegator :@q, :push, :enq > def_delegator :@q, :shift, :deq > > # support some general Array methods that fit Queues well > def_delegators :@q, :clear, :first, :push, :shift, :size > end > > q = Queue.new > q.enq 1, 2, 3, 4, 5 > q.push 6 > > q.shift # => 1 > while q.size > 0 > puts q.deq > end > > q.enq "Ruby", "Perl", "Python" > puts q.first > q.clear > puts q.first > > Hope that helps. > > James Edward Gray II Yuck! Didn't new this one. That covers pretty much everything one needs (apart from Daniel's suggestion). Thanks for the heads up! Kind regards robert