[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

iterate through an array of method names to an object

Skye Weir-mathewes

4/16/2007 9:11:00 PM

I've been trying to create a iterator that will run through and array of
method names, sending each one to an object. For some reason the object
doesn't like the method names if I send them via an iterator, but if I
spell each one out, it works fine. When I try to use the iterator I get
and error indicating that ruby doesn't think my method names actually
name a method.

Here's some of my code:

functions = ["addHeadersAndFooters", "addListNameToSubject", "admin",
"allowCrossPosting ", "allowDuplicatePosts ", "allowInfo ",
"anyoneCanPost "]

functions.each do |funk|
puts name_o_my_object.funk
end

gives me the following error:

undefined method `funk' for #<SOAP::Mapping::Object:0x5585bd8>
(NoMethodError)

but if I write somthing like:

functions.each do |funk|
puts name_o_my_object.addHeadersAndFooters
end

the iterator works fine, so... what's up with that?

--
Posted via http://www.ruby-....

3 Answers

Stefano Crocco

4/16/2007 9:16:00 PM

0

Alle lunedì 16 aprile 2007, Skye Weir-mathewes ha scritto:
> I've been trying to create a iterator that will run through and array of
> method names, sending each one to an object. For some reason the object
> doesn't like the method names if I send them via an iterator, but if I
> spell each one out, it works fine. When I try to use the iterator I get
> and error indicating that ruby doesn't think my method names actually
> name a method.
>
> Here's some of my code:
>
> functions = ["addHeadersAndFooters", "addListNameToSubject", "admin",
> "allowCrossPosting ", "allowDuplicatePosts ", "allowInfo ",
> "anyoneCanPost "]
>
> functions.each do |funk|
> puts name_o_my_object.funk
> end
>
> gives me the following error:
>
> undefined method `funk' for #<SOAP::Mapping::Object:0x5585bd8>
> (NoMethodError)
>
> but if I write somthing like:
>
> functions.each do |funk|
> puts name_o_my_object.addHeadersAndFooters
> end
>
> the iterator works fine, so... what's up with that?

In the first case, you write name_o_my_object.funk. In this case, ruby tries
to call a method called funk on the object name_o_my_object. What you need to
do is:

puts name_o_my_object.send(funk)

I hope this helps

Stefano

cammo

4/17/2007 12:29:00 PM

0

But also the send method will expect to get a symbol not a string so
you'll need to do something like

functions.each do |funk|
funk.to_sym
puts name_o_my_object.send(funk)
end

I tried that in irb and it worked so fingers crossed should work for
you too.

Cam


On Apr 17, 7:16 am, Stefano Crocco <stefano.cro...@alice.it> wrote:
> Alle lunedì 16 aprile 2007, Skye Weir-mathewes ha scritto:
>
>
>
> > I've been trying to create a iterator that will run through and array of
> > method names, sending each one to an object. For some reason the object
> > doesn't like the method names if I send them via an iterator, but if I
> > spell each one out, it works fine. When I try to use the iterator I get
> > and error indicating that ruby doesn't think my method names actually
> > name a method.
>
> > Here's some of my code:
>
> > functions = ["addHeadersAndFooters", "addListNameToSubject", "admin",
> > "allowCrossPosting ", "allowDuplicatePosts ", "allowInfo ",
> > "anyoneCanPost "]
>
> > functions.each do |funk|
> > puts name_o_my_object.funk
> > end
>
> > gives me the following error:
>
> > undefined method `funk' for #<SOAP::Mapping::Object:0x5585bd8>
> > (NoMethodError)
>
> > but if I write somthing like:
>
> > functions.each do |funk|
> > puts name_o_my_object.addHeadersAndFooters
> > end
>
> > the iterator works fine, so... what's up with that?
>
> In the first case, you write name_o_my_object.funk. In this case, ruby tries
> to call a method called funk on the object name_o_my_object. What you need to
> do is:
>
> puts name_o_my_object.send(funk)
>
> I hope this helps
>
> Stefano


Stefano Crocco

4/17/2007 12:38:00 PM

0

Alle martedì 17 aprile 2007, cammo ha scritto:
> But also the send method will expect to get a symbol not a string so
> you'll need to do something like
>
> functions.each do |funk|
>     funk.to_sym
>     puts name_o_my_object.send(funk)
>   end
>
> I tried that in irb and it worked so fingers crossed should work for
> you too.
>
> Cam

send accepts both a string or a symbol. The documentation for Object#send,
states

object.send(symbol, [args...])

and the documentation of Object class, says:

In the descriptions of Object's methods, the parameter symbol refers to a
symbol, which is either a quoted string or a Symbol

Besides, your own code passes a string to send, since funk.to_sym returns a
symbol, but doesn't change what is stored inside funk, so when funk is passed
to send, it still contains a string.

Stefano