[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Dynamically call classes

Tizian Taz

11/20/2007 10:00:00 AM

Hello,

I'm new to Ruby but have got several years of experience with PHP. I
work on a project with several classes witch analyse text blocks. The
blocks begin with headers like "Status" or "Update" but that's not my
problem.

I'd like to call classes dynamically like this :

var = 'Status'
# and now I want to call the class "Status"

How can I manage it?
--
Posted via http://www.ruby-....

7 Answers

Peter Szinek

11/20/2007 10:06:00 AM

0

Tizian Taz wrote:
> Hello,
>
> I'm new to Ruby but have got several years of experience with PHP. I
> work on a project with several classes witch analyse text blocks. The
> blocks begin with headers like "Status" or "Update" but that's not my
> problem.
>
> I'd like to call classes dynamically like this :
>
> var = 'Status'
> # and now I want to call the class "Status"
>
> How can I manage it?

>> Kernel.const_get('Status')
=> Status

cheers,
Peter
___
http://www.rubyra...
http://s...

Tizian Taz

11/20/2007 10:21:00 AM

0

Ok, but now, how can I access for example the method Hello which this
existing class inheritated from his mother-class?

I ask this because "Status.Hello" doesn't work...

Maybe I wasn't clear enough in my description :

The classes that I want to call all exist but I don't want to make a
huge amount of tests to know which I have to call. Tell me if I'm not
clear :S

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

Tizian Taz

11/20/2007 10:42:00 AM

0

Don't care about what I said, it works fine!

Thank you very much!

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

Peter Szinek

11/20/2007 10:51:00 AM

0

Tizian Taz wrote:
> Ok, but now, how can I access for example the method Hello which this
> existing class inheritated from his mother-class?
>
> I ask this because "Status.Hello" doesn't work...
>
> Maybe I wasn't clear enough in my description :
>
> The classes that I want to call all exist but I don't want to make a
> huge amount of tests to know which I have to call. Tell me if I'm not
> clear :S
>

class Animal
def ooze
puts "oooooo"
end

def Animal.winkle
puts "winkle"
end
end

class Dog < Animal
end

Kernel.const_get("Dog").new.ooze
Kernel.const_get("Dog").winkle


HTH,
Peter
___
http://www.rubyra...
http://s...


Rick DeNatale

11/20/2007 1:38:00 PM

0

On Nov 20, 2007 5:21 AM, Tizian Taz <tazmaniack@gmail.com> wrote:
> Ok, but now, how can I access for example the method Hello which this
> existing class inheritated from his mother-class?
>
> I ask this because "Status.Hello" doesn't work...
>
> Maybe I wasn't clear enough in my description :
>
> The classes that I want to call all exist but I don't want to make a
> huge amount of tests to know which I have to call. Tell me if I'm not
> clear :S

You can do this, and others are already helping. but...

Do you really have a firm requirement to use a string to represent the class.

Why not just:

var = Status

...

var.Hello

Classes in Ruby are objects and variables can be used to refer to them.


--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denh...

Jacob Dunphy

11/21/2007 11:02:00 PM

0

And with this, you can do the var = Kernel.const_get("ClassName") and
you have a reference to that class for the scope of your operation.

On Nov 20, 5:37 am, "Rick DeNatale" <rick.denat...@gmail.com> wrote:
> On Nov 20, 2007 5:21 AM, Tizian Taz <tazmani...@gmail.com> wrote:
>
> > Ok, but now, how can I access for example the method Hello which this
> > existing class inheritated from his mother-class?
>
> > I ask this because "Status.Hello" doesn't work...
>
> > Maybe I wasn't clear enough in my description :
>
> > The classes that I want to call all exist but I don't want to make a
> > huge amount of tests to know which I have to call. Tell me if I'm not
> > clear :S
>
> You can do this, and others are already helping. but...
>
> Do you really have a firm requirement to use a string to represent the class.
>
> Why not just:
>
> var = Status
>
> ...
>
> var.Hello
>
> Classes in Ruby are objects and variables can be used to refer to them.
>
> --
> Rick DeNatale
>
> My blog on Rubyhttp://talklikeaduck.denh...

ara.t.howard

11/22/2007 12:21:00 AM

0


On Nov 21, 2007, at 4:02 PM, jacob.dunphy@gmail.com wrote:

> And with this, you can do the var = Kernel.const_get("ClassName") and
> you have a reference to that class for the scope of your operation.

imho const_get is just to fragile for most uses, i prefer something
like this:



cfp:~ > cat a.rb
class Class
def self.for string
value =
Thread.new do
$SAFE = 4
eval string.to_s, TOPLEVEL_BINDING.dup
end.value
raise ArgumentError unless value.is_a? Class
value
end
end

p Class.for('File::Stat')
p Class.for('Foo::Bar')



cfp:~ > ruby a.rb
File::Stat
a.rb:6:in `eval': (eval):1: uninitialized constant Foo (NameError)
from a.rb:4:in `value'
from a.rb:4:in `for'
from a.rb:14



a @ http://codeforp...
--
we can deny everything, except that we have the possibility of being
better. simply reflect on that.
h.h. the 14th dalai lama