[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Re: Run some method based on some condition

Jeremy McAnally

4/5/2007 10:31:00 PM

Something like this would work:

irb(main):008:0> x = ['chop!', 'chop!', 'chop!']
=> ["chop!", "chop!", "chop!"]
irb(main):009:0> y = "This is a string!!!"
=> "This is a string!!!"
irb(main):010:0> x.each {|method| y.send(method)}
=> ["chop!", "chop!", "chop!"]
irb(main):011:0> y
=> "This is a string"

The send method allows you to do what you're asking. :)

--Jeremy

On 4/5/07, Ken Mitchell <kmitchell@farmerswireless.com> wrote:
>
> Say I wanted to run a method based on a condition like so:
>
> class Klass
> def initialize
> a = '1st'
> b = '2nd'
> c = '3rd'
> end
>
> def a
> a
> end
>
> def b
> b
> end
>
> def c
> c
> end
> end
>
> ob = Klass.new
> ['a','b','c'].do {|x| ob. **here I would want to get at #a and #b and #c**
>
> or maybe better explained like this
>
> var = 'a'
>
> puts ob.** ???? **
>
> Or if you know perl
> $foo = {bar => "baz"};
> $baz = "bar";
>
> puts $foo->{$baz};
>
> ---> baz
>
> Sorry to be so confusing.
>
>
>
>
>
> Thanks,
>
> Ken Mitchell
> --
>
> Farmers Wireless
> Office: (256)638-4040 x 224
> Mobile: (256)899-3391
> Fax: (256)638-2110
> kmitchell@farmerswireless.com
>
>
>
> CONFIDENTIALITY NOTICE: This e-mail and any attachment to it may contain
> confidential and legally privileged information. This information is
> intended only for the recipient named above. If you are not the intended
> recipient, take notice that any disclosure, copying, distribution or taking
> of any action based upon this information is prohibited by law. If you have
> received this e-mail in error, please return it to the sender and delete
> this copy from your system. Thank you.
>
>
>
>


--
http://www.jeremymca...

My free Ruby e-book:
http://www.humblelittlerubybook...

My blogs:
http://www.mrneigh...
http://www.rubyinpra...

1 Answer

Dan Zwell

4/6/2007 1:55:00 AM

0

Have a look at Module#const_get. I think this is what you wanted:
>> bar = Klass.const_get(foo).new
=> #<Klass::SubKlass1:0x2b5a3216e470>

Dan

Ken Mitchell wrote:
> Now I need to do something similar, but probably more difficult.
>
> class Klass
>
> class SubKlass1
> def initialize
> end
> end
>
> class SubKlass2
> def initialize
> end
> end
>
> end
>
> foo = "SubKlass1"
>
> bar = Klass::send(foo).new **That is wrong, because method SubKlass1
> doesn't exist in Klass::Class. But I think you get my point.
>
> On Fri, 2007-04-06 at 07:30 +0900, Jeremy McAnally wrote:
>> Something like this would work:
>>
>> irb(main):008:0> x = ['chop!', 'chop!', 'chop!']
>> => ["chop!", "chop!", "chop!"]
>> irb(main):009:0> y = "This is a string!!!"
>> => "This is a string!!!"
>> irb(main):010:0> x.each {|method| y.send(method)}
>> => ["chop!", "chop!", "chop!"]
>> irb(main):011:0> y
>> => "This is a string"
>>
>> The send method allows you to do what you're asking. :)
>>
>> --Jeremy
>>
>> On 4/5/07, Ken Mitchell <kmitchell@farmerswireless.com <mailto:kmitchell@farmerswireless.com>> wrote:
>> >
>> > Say I wanted to run a method based on a condition like so:
>> >
>> > class Klass
>> > def initialize
>> > a = '1st'
>> > b = '2nd'
>> > c = '3rd'
>> > end
>> >
>> > def a
>> > a
>> > end
>> >
>> > def b
>> > b
>> > end
>> >
>> > def c
>> > c
>> > end
>> > end
>> >
>> > ob = Klass.new
>> > ['a','b','c'].do {|x| ob. **here I would want to get at #a and #b and #c**
>> >
>> > or maybe better explained like this
>> >
>> > var = 'a'
>> >
>> > puts ob.** ???? **
>> >
>> > Or if you know perl
>> > $foo = {bar => "baz"};
>> > $baz = "bar";
>> >
>> > puts $foo->{$baz};
>> >
>> > ---> baz
>> >
>> > Sorry to be so confusing.
>> >
>> >
>> >
>> >
>> >
>> > Thanks,
>> >
>> > Ken Mitchell
>> > --
>> >
>> > Farmers Wireless
>> > Office: (256)638-4040 x 224
>> > Mobile: (256)899-3391
>> > Fax: (256)638-2110
>> > kmitchell@farmerswireless.com <mailto:kmitchell@farmerswireless.com>
>> >
>> >
>> >
>> > CONFIDENTIALITY NOTICE: This e-mail and any attachment to it may contain
>> > confidential and legally privileged information. This information is
>> > intended only for the recipient named above. If you are not the intended
>> > recipient, take notice that any disclosure, copying, distribution or taking
>> > of any action based upon this information is prohibited by law. If you have
>> > received this e-mail in error, please return it to the sender and delete
>> > this copy from your system. Thank you.
>> >
>> >
>> >
>> >
>>
>>
>
>
> Thanks,
>
> Ken Mitchell
> --
>
> Farmers Wireless
> Office: (256)638-4040 x 224
> Mobile: (256)899-3391
> Fax: (256)638-2110
> kmitchell@farmerswireless.com
>
>
>
> *CONFIDENTIALITY NOTICE:* This e-mail and any attachment to it may
> contain confidential and legally privileged information. This
> information is intended only for the recipient named above. If you are
> not the intended recipient, take notice that any disclosure, copying,
> distribution or taking of any action based upon this information is
> prohibited by law. If you have received this e-mail in error, please
> return it to the sender and delete this copy from your system. Thank you.
>
>
>