Re: Dispatching when function name is stated as a symbol
- From: "Jesús Gabriel y Galán" <jgabrielygalan@xxxxxxxxx>
- Date: Fri, 31 Aug 2007 17:35:11 +0900
On 8/31/07, Ronald Fischer <ronald.fischer@xxxxxxxxxx> 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.
.
- Follow-Ups:
- Re: Dispatching when function name is stated as a symbol
- From: Ronald Fischer
- 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
- References:
- Dispatching when function name is stated as a symbol
- From: Ronald Fischer
- 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: Dispatching when function name is stated as a symbol
- Previous by thread: Dispatching when function name is stated as a symbol
- Next by thread: Re: Dispatching when function name is stated as a symbol
- Index(es):
Relevant Pages
|