[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Call a Function

Jason Shelton

2/3/2009 9:39:00 PM


Hello=2C
=20
I currently have an array of strings. Let's say=2C for example=2C my array=
contains the following:
=20
['one'=2C 'two'=2C 'three']
=20
Each element in my array is the name of a function in my program. I want t=
o call the functions=2C using the array element. So for example=2C lets sa=
y that my array is named 'numArray'. I want to call the function in my pro=
gram named 'one'. I am now trying numArray[0]. Is there a way to make the=
numArray[0] be recognized as 'one' and call the function? If my question =
is not clear=2C I can elaborate. Thanks in advance for all help.
=20
- Shelton
_________________________________________________________________
Windows Live=99 Hotmail=AE:=85more than just e-mail.=20
http://windowslive.com/explore?ocid=3DTXT_TAGLM_WL_t2_hm_justgotbe...
ore_012009=

8 Answers

Sebastian Hungerecker

2/3/2009 9:47:00 PM

0

Jason Shelton wrote:
> I currently have an array of strings. Let's say, for example, my array
> contains the following:
>
> ['one', 'two', 'three']
>
> Each element in my array is the name of a function in my program. I want
> to call the functions, using the array element.

Object#send is the method you want. It takes a method name (follows by a list
of arguments, if there are any) as an argument and calls that method on the
receiver.

HTH,
Sebastian
--
NP: Die Apokalyptischen Reiter - Nach Der Ebbe
Jabber: sepp2k@jabber.org
ICQ: 205544826

Matthew Moss

2/3/2009 9:54:00 PM

0


On Feb 3, 2009, at 3:39 PM, Jason Shelton wrote:

>
> Hello,
>
> I currently have an array of strings. Let's say, for example, my
> array contains the following:
>
> ['one', 'two', 'three']
>
> Each element in my array is the name of a function in my program. I
> want to call the functions, using the array element. So for
> example, lets say that my array is named 'numArray'. I want to call
> the function in my program named 'one'. I am now trying
> numArray[0]. Is there a way to make the numArray[0] be recognized
> as 'one' and call the function? If my question is not clear, I can
> elaborate. Thanks in advance for all help.


Convert the string to a symbol and send it to the appropriate object.

> send( numArray[0].to_sym )
=> NoMethodError: undefined method 'one' for main:Object

> def one; puts "One!"; end
=> nil

> send( numArray[0].to_sym )
One!
=> nil


Jonathon Brenner

2/3/2009 9:59:00 PM

0

Use "eval".

irb(main):001:0> def one
irb(main):002:1> puts "1"
irb(main):003:1> end
=3D> nil
irb(main):004:0> def two
irb(main):005:1> puts "2"
irb(main):006:1> end
=3D> nil
irb(main):007:0> metharray =3D ['one', 'two']
=3D> ["one", "two"]
irb(main):008:0> metharray.each { |e| eval e }
1
2
=3D> ["one", "two"]


On Tue, Feb 3, 2009 at 4:39 PM, Jason Shelton <jas.shelton@hotmail.com> wro=
te:
>
> Hello,
>
> I currently have an array of strings. Let's say, for example, my array c=
ontains the following:
>
> ['one', 'two', 'three']
>
> Each element in my array is the name of a function in my program. I want=
to call the functions, using the array element. So for example, lets say =
that my array is named 'numArray'. I want to call the function in my progr=
am named 'one'. I am now trying numArray[0]. Is there a way to make the n=
umArray[0] be recognized as 'one' and call the function? If my question is=
not clear, I can elaborate. Thanks in advance for all help.
>
> - Shelton
> _________________________________________________________________
> Windows Live=99 Hotmail(R):=85more than just e-mail.
> http://windowslive.com/explore?ocid=3DTXT_TAGLM_WL_t2_hm_justgot...
plore_012009

David A. Black

2/3/2009 10:01:00 PM

0

Hi --

On Wed, 4 Feb 2009, Matthew Moss wrote:

>
> On Feb 3, 2009, at 3:39 PM, Jason Shelton wrote:
>
>>
>> Hello,
>>
>> I currently have an array of strings. Let's say, for example, my array
>> contains the following:
>>
>> ['one', 'two', 'three']
>>
>> Each element in my array is the name of a function in my program. I want
>> to call the functions, using the array element. So for example, lets say
>> that my array is named 'numArray'. I want to call the function in my
>> program named 'one'. I am now trying numArray[0]. Is there a way to make
>> the numArray[0] be recognized as 'one' and call the function? If my
>> question is not clear, I can elaborate. Thanks in advance for all help.
>
>
> Convert the string to a symbol and send it to the appropriate object.

No need to convert it. send will take a string.


David

--
David A. Black / Ruby Power and Light, LLC
Ruby/Rails consulting & training: http://www.r...
Coming in 2009: The Well-Grounded Rubyist (http://manning....)

http://www.wis... => Independent, social wishlist management!

Matthew Moss

2/3/2009 10:20:00 PM

0


On Feb 3, 2009, at 4:00 PM, Dominik Honnef wrote:

>
>> Convert the string to a symbol and send it to the appropriate object.
> That isn't even necessary, sending a string works just as fine.

Yeah, after the fact, I tried it like you say. For some reason, I had
the impression that strings didn't auto-convert to symbols.


David A. Black

2/3/2009 10:27:00 PM

0

Hi --

On Wed, 4 Feb 2009, Matthew Moss wrote:

>
> On Feb 3, 2009, at 4:00 PM, Dominik Honnef wrote:
>
>>
>>> Convert the string to a symbol and send it to the appropriate object.
>> That isn't even necessary, sending a string works just as fine.
>
> Yeah, after the fact, I tried it like you say. For some reason, I had the
> impression that strings didn't auto-convert to symbols.

The documentation is misleading; it specifies the argument as a
symbol, but it can be either. (And I consider that a feature; I don't
think it's just working by chance.)


David

--
David A. Black / Ruby Power and Light, LLC
Ruby/Rails consulting & training: http://www.r...
Coming in 2009: The Well-Grounded Rubyist (http://manning....)

http://www.wis... => Independent, social wishlist management!

Julian Leviston

2/3/2009 11:27:00 PM

0

Wouldn't you have to pass in the calling context (self from the
callers pov) if you were deffing your methods without a class? Ie
needs to k ow the object to send on, no? :)

Blog: http://random8.ze...
Learn rails: http://sensei.ze...

On 04/02/2009, at 8:46 AM, Sebastian Hungerecker
<sepp2k@googlemail.com> wrote:

> Jason Shelton wrote:
>> I currently have an array of strings. Let's say, for example, my
>> array
>> contains the following:
>>
>> ['one', 'two', 'three']
>>
>> Each element in my array is the name of a function in my program.
>> I want
>> to call the functions, using the array element.
>
> Object#send is the method you want. It takes a method name (follows
> by a list
> of arguments, if there are any) as an argument and calls that method
> on the
> receiver.
>
> HTH,
> Sebastian
> --
> NP: Die Apokalyptischen Reiter - Nach Der Ebbe
> Jabber: sepp2k@jabber.org
> ICQ: 205544826
>

Sebastian Hungerecker

2/4/2009 10:17:00 AM

0

Julian Leviston wrote:
> Wouldn't you have to pass in the calling context (self from the =A0
> callers pov) if you were deffing your methods without a class?

self from the callers pov is also self from send's pov if you invoke it=20
without an explicit receiver. So no, you don't.

HTH,
Sebastian
=2D-=20
Jabber: sepp2k@jabber.org
ICQ: 205544826