From: Ronald Fischer Date: 2007-08-31T17:18:08+09:00 Subject: Dispatching when function name is stated as a symbol 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. Of course I can use a big case ... end on the function names (ugly). I can turn the symbol :g2 into a string 'g2', marshal the arguments and put together a string containing the function call (even uglier). I also thought about using a hash of proc object (the keys being the symbols, the values being the procedures), kind of {:g1 => proc {|a,b,c] g1(a,b,c)}, :g2 => proc {|d,e| g2(d,e) },...}[x[0]]. call(*x[1..-1]) but this looks like tremendous overkill too. Is there a simpler way of doing it? Ronald -- Ronald Fischer Phone: +49-89-452133-162 -- Ronald Fischer Phone: +49-89-452133-162