From: James Edward Gray II Date: 2005-07-07T22:15:54+09:00 Subject: Re: Inheriting Array and slice() behaviour 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