From: Daniel Brockman Date: 2005-07-07T21:10:07+09:00 Subject: Re: Inheriting Array and slice() behaviour "Robert Klemme" writes: > 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 Maybe change that to not assume an instance variable and accept multiple method names: class Module def delegate target, *methods for method in methods do module_eval %{def #{method} *a, &b (#{target}).#{method} *a, &b end} end end end class Buffer delegate :@content, :size, :length end That way you could do stuff like this: class Balancer delegate '@workers.random', :process end (Sorry about the lack of a better example.) -- Daniel Brockman