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"
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"
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.denhaven2.com/
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