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 <ronald.fischer@xxxxxxxxxx>
Phone: +49-89-452133-162

--
Ronald Fischer <ronald.fischer@xxxxxxxxxx>
Phone: +49-89-452133-162

.



Relevant Pages

  • Taint (like in Perl) as a Python module: taint.py
    ... The following is my first attempt at adding a taint feature to Python ... string to create a safe string from it. ... def replace: ...
    (comp.lang.python)
  • Memory Question
    ... I have wrote a helper to my program which monitors object count, memory utilization and a threshold of 10% to determine how many objects are sticking around and how many are being garbage collected. ... occured right before the original String count). ... def print_threshold_breakers hsh1, hsh2, threshold ... putsf 'Building mem usage', mem_usage ...
    (comp.lang.ruby)
  • Re: [QUIZ] Editing Text (#145)
    ... I start by partially implementing a string class that works equally ... a single "gap" and recirculates unused space better. ... def inspect ... # remove excess trailing space if too much ...
    (comp.lang.ruby)
  • [SUMMARY] DayRange (#92)
    ... A couple of submitters mentioned that this problem isn't quite as simple as it ... def test_english ... This is the heart of the String building process and many solutions landed on ... Array of Arrays with the days divided into groups of start and end days. ...
    (comp.lang.ruby)
  • Re: Named/positional method args
    ... duck-typing isn't going to do a bit of good ... if one of those is passed in instead of the String representation. ... def to_file; self end ... It's not really limiting to specify types in method interfaces. ...
    (comp.lang.ruby)