2007/10/12, Ross X Dawson <Ross.Dawson / aas.com.au>: > irb(main):001:0> drill_down = lambda do |obj, method_names| > irb(main):002:1* o ||= obj > irb(main):003:1> method_names.split('.').each {|m| o = o.send(m)} > irb(main):004:1> o > irb(main):005:1> end > => #<Proc:0x40221e48@(irb):1> > irb(main):006:0> drill_down.call(1,'succ.to_s') > => "2" > irb(main):007:0> drill_down.call(1,'succ.succ.succ.to_s') > => "4" Ross, I would implement something like that with Enumerable#inject: def drill_down(obj, method_names) method_names.split('.').inject(obj) {|o, m| o.send(m)} end But I'm not quite sure that having strings with method calls is the way to go. Where do the strings with the method names come from? Do the users of your application have to enter them somewhere? What about arguments to the method calls? Regards, Pit