Dispatching when function name is stated as a symbol
- From: "Ronald Fischer" <ronald.fischer@xxxxxxxxxx>
- Date: Fri, 31 Aug 2007 17:18:08 +0900
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 <ronald.fischer@xxxxxxxxxx>
Phone: +49-89-452133-162
--
Ronald Fischer <ronald.fischer@xxxxxxxxxx>
Phone: +49-89-452133-162
.
- Follow-Ups:
- Re: Dispatching when function name is stated as a symbol
- From: Jesús Gabriel y Galán
- Re: Dispatching when function name is stated as a symbol
- Prev by Date: Re: 0.06 == 0.06 returns false in Ruby?
- Next by Date: Re: 0.06 == 0.06 returns false in Ruby?
- Previous by thread: WebServices & WSDL
- Next by thread: Re: Dispatching when function name is stated as a symbol
- Index(es):
Relevant Pages
|