Passing args from within method_missing

S

Sharon Phillips

Hi,

I have an hash of code blocks(procs?), @styles, and am trying to call
these using method missing. Problem is, some take one argument, and
others take two, and I can't seem to pass args to them without if
being passed as an array

Here's the method_missing code

def method_missing style_type, *args
case args.size
when 1 : @styles [style_type].call(args[0])
when 2 : @styles [style_type].call(args[0], args[1])
end
end


I'm sure there's a way for me to get rid of the case statement, but
if I try
@styles [style_type].call(args) it just gets sent an array.

Question is, how do I send the contents of the args array?

I realise I should probably have a means of dealing with a genuine
method_missing. What's the 'ruby way' of doing this? if I call
method_missing again, wont I end in a recursive mess?

Is this making any sense?

Cheers,
Dave
 
S

Stefano Crocco

Alle mercoled=EC 13 giugno 2007, Sharon Phillips ha scritto:
Hi,

I have an hash of code blocks(procs?), @styles, and am trying to call
these using method missing. Problem is, some take one argument, and
others take two, and I can't seem to pass args to them without if
being passed as an array

Here's the method_missing code

def method_missing style_type, *args
case args.size
when 1 : @styles [style_type].call(args[0])
when 2 : @styles [style_type].call(args[0], args[1])
end
end


I'm sure there's a way for me to get rid of the case statement, but
if I try
@styles [style_type].call(args) it just gets sent an array.

Question is, how do I send the contents of the args array?

I realise I should probably have a means of dealing with a genuine
method_missing. What's the 'ruby way' of doing this? if I call
method_missing again, wont I end in a recursive mess?

Is this making any sense?

Cheers,
Dave

def method_missing style_type, *args
@styles[style_type].call(*args)
end

I hope this helps

Stefano
 
W

Wolfgang Nádasi-donner

Sharon said:
@styles [style_type].call(args) it just gets sent an array.

Isn't "@styles [style_type].call(*args)" what you are looking for?

Wolfgang Nádasi-Donner
 
S

Sharon Phillips

def method_missing style_type, *args
@styles[style_type].call(*args)
end

I hope this helps

Certainly does. I knew it would be something simple, just couldn't
figure it out and my Pickaxe is at work...

Thanks heaps Stefano and Wolfgang
 
R

Rick DeNatale

Here's the method_missing code

def method_missing style_type, *args
case args.size
when 1 : @styles [style_type].call(args[0])
when 2 : @styles [style_type].call(args[0], args[1])
end
end


I'm sure there's a way for me to get rid of the case statement, but
if I try
@styles [style_type].call(args) it just gets sent an array.

Question is, how do I send the contents of the args array?

I realise I should probably have a means of dealing with a genuine
method_missing. What's the 'ruby way' of doing this? if I call
method_missing again, wont I end in a recursive mess?

def method_missing(symbol, *args)
if prc = @styles[symbol]
prc.call(*args)
else
super
end
end


--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

IPMS/USA Region 12 Coordinator
http://ipmsr12.denhaven2.com/

Visit the Project Mercury Wiki Site
http://www.mercuryspacecraft.com/
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top