From: Tim Pease Date: 2006-12-16T02:09:15+09:00 Subject: Re: using Proc and yield On 12/15/06, Alber Eric wrote: > OK, thank you for your quick answer > > I will just expose what I'm trying to do : I have four differents > methods that are yielding strings. I want to use one or the other > depending on the context but the rest of the process is the same, so I > wrote something like that > > p1 = nil > p2 = nil > > # First argument handling > case arg1 > when 1 > p1 = Proc.new { methodI { |s| yield s } } > when 2 > p1 = Proc.new { methodII { |s| yield ("foo-" + s + "-bar") } } > end > > # Second argument handling > case arg2 > when 3 > p2 = Proc.new { methodIII { |s| yield s } } > when 4 > p1 = Proc.new { methodIV { |s| yield ("oof-" + s + "-rab") } } > end > > p1.call { |i| > p2.call { |j| > process(i) > } > } > > What I'm looking for is a sort of function pointer. > def p1( arg ) yield arg end def p2( arg ) yield arg end # First argument handling case arg1 when 1: nil # p1 already defined correctly when 2 eval %( def p1( arg ) yield( "foo-" + arg + "-bar" ) end ) end # Second argument handling case arg2 when 3: nil # p2 already defined correctly when 4 eval %( def p1( arg ) yield ("oof-" + arg + "-rab") end ) end p1( arg1 ) do |i| p2( arg2 ) do |j| process(i,j) end end No need for function pointers. Just define (or redefine) the methods as you need them. Blessings, TwP