|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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-forum.com/. |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
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.rubyrailways.com http://scrubyt.org |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
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-forum.com/. |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Don't care about what I said, it works fine!
Thank you very much! -- Posted via http://www.ruby-forum.com/. |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
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.rubyrailways.com http://scrubyt.org |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
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 ing. 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.denhaven2.com/ |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
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 ing. 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.denhaven2.com/ |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
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://codeforpeople.com/ -- we can deny everything, except that we have the possibility of being better. simply reflect on that. h.h. the 14th dalai lama |
|
![]() |
| Outils de la discussion | |
|
|