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.
- Shelton
···
_________________________________________________________________
Windows Live™ Hotmail®:…more than just e-mail.
http://windowslive.com/explore?ocid=TXT_TAGLM_WL_t2_hm_justgotbetter_explore_012009
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
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
···
On Feb 3, 2009, at 3:39 PM, Jason Shelton wrote:
Use "eval".
irb(main):001:0> def one
irb(main):002:1> puts "1"
irb(main):003:1> end
=> nil
irb(main):004:0> def two
irb(main):005:1> puts "2"
irb(main):006:1> end
=> nil
irb(main):007:0> metharray = ['one', 'two']
=> ["one", "two"]
irb(main):008:0> metharray.each { |e| eval e }
1
2
=> ["one", "two"]
···
On Tue, Feb 3, 2009 at 4:39 PM, Jason Shelton <jas.shelton@hotmail.com> 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.
- Shelton
_________________________________________________________________
Windows Live™ Hotmail(R):…more than just e-mail.
http://windowslive.com/explore?ocid=TXT_TAGLM_WL_t2_hm_justgotbetter_explore_012009
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.
···
--
Dominik Honnef
dominikho@gmx.net
Use "eval".
No, please do not.
Using eval is not necessary *most* of the time, especially in this
case where you got the send method.
···
--
Dominik Honnef
dominikho@gmx.net
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.zenunit.com/
Learn rails: http://sensei.zenunit.com/
···
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
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.
···
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.
Julian Leviston wrote:
Wouldn't you have to pass in the calling context (self from the
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
without an explicit receiver. So no, you don't.
HTH,
Sebastian
···
--
Jabber: sepp2k@jabber.org
ICQ: 205544826