From: "Jesús Gabriel y Galán" Date: 2007-08-31T17:35:11+09:00 Subject: Re: Dispatching when function name is stated as a symbol On 8/31/07, Ronald Fischer wrote: > Can someone point out an elegant way to solve the following problem? > > I have a module with a function f and additional functions g1, g2, ..., > which basically looks like this: > > module M > def f(&cb) > ... > x=cb.call > # DO SOMETHING .... see below > end > def g1(a,b,c) > ... > end > def g2(d,e) > ... > end > # etc > end > > The DO SOMETHING part looks like this: The proc object being called > is supposed to return an array, where the first element is a symbol > corresponding to one of the function names g1, g2 ...., and the > remaining array elements corresponding to the parameters of this > function. Hence, if > x=cb.call > causes x to contain [:g2, 25, 'dummy'], I would like to execute > g2(25,'dummy') > > I have not found a convincing way of doing this. Would this work for you? def f(&cb) x=cb.call name = x[0] args = x[1..-1] send(name, *args); end def g1(a,b,c) puts "g1: #{a}, #{b}, #{c}" end def g2(d,e) puts "g1: #{a}, #{b}, #{c}" end irb(main):017:0> f {[:g1, 1, 2, 3]} g1: 1, 2, 3 => nil irb(main):018:0> f {[:g2, 1, 2, 3]} g2: 1, 2, 3 => nil Hope this helps, Jesus.