On Wed, 2006-03-15 at 00:20 +0900, Mark Volkmann wrote: > In the following code the do_this instance method of the foo object > calls yield to run the block that is passed to it. > > foo.do_this(p1, p2) { > do_that(p3, p4) > } > > Is there any way to make it so that do_that is executed in the context > of the foo object, i.e. it acts as though it was invoked with > foo.do_that(p3, p4)? I know I could just say "foo.do_that(p3, p4)", > but I was wondering if I could avoid that. If you're writing 'foo' then you can do: class Foo def do_this(&blk) instance_eval &blk end def do_that puts "Doing that..." end end f.do_this { do_that } # (prints) Doing that... # can use this form, too f.do_this { |foo| foo.do_that } # (prints) Doing that... There's a few subtleties to using instance_eval you might want to look up, but maybe it does the job... -- Ross Bamford - rosco / roscopeco.REMOVE.co.uk