How to do: var1 = var2.new(.....) (var2 contains classname)

Hi All

I have a situation in which I have the name of the class in a variable
So normally I would do
song = Song.new(“Bicylops”, “Fleck”, 260)

But I need to do something like
var2 = “Song”
var1 = var2.new(“Bicylops”, “Fleck”, 260)

This doesn’t work!
Any suggestions how to do this ?

Thnx
LuCa

On 2/14/07, Luca S. [email protected] wrote:

I have a situation in which I have the name of the class in a variable
So normally I would do
song = Song.new(“Bicylops”, “Fleck”, 260)

But I need to do something like
var2 = “Song”
var1 = var2.new(“Bicylops”, “Fleck”, 260)

This doesn’t work!
Any suggestions how to do this ?

var1 = Object.get_const(var2).new(“Bicyclops”, “Fleck”, 260)

On 2/14/07, Luca S. [email protected] wrote:

This doesn’t work!
Any suggestions how to do this ?

You need to convert your string “Song” into a Class object.

var2 = “Song”
var1 = Object.const_get(var2).new(“Bicyclops”, “Fleck”, 260)

All class and module objects are stored as constants in Object. It
gets a little tricky if you have a class withing a module –
“Music::Song”. Then you’ll have to do something like this:

current = Object
var2 = “Music::Song”
var2.split(“::”).each do |str|
current = current.const_get(str)
end
var1 = current.new( … )

Hope this helps

TwP

Maybe you want to have a look at this:

var1 = Object.const_get(var2)

Kind regards
Nicolai

2007/2/14, Luca S. [email protected]:

Hi

Thanks for the solution!
It works!!

LuCa

Lyle J. wrote:

var1 = Object.get_const(var2).new(“Bicyclops”, “Fleck”, 260)

should be #const_get()

On 2/14/07, Lyle J. [email protected] wrote:

var1 = Object.get_const(var2).new(“Bicyclops”, “Fleck”, 260)

Whoops, that should be “const_get(var2)”, not “get_const(var2)”.

Luca S. <lcalje gmail.com> writes:

Hi All

I have a situation in which I have the name of the class in a variable
So normally I would do
song = Song.new(“Bicylops”, “Fleck”, 260)

I’m surprised no one else has mentioned this, but there’s very little
need to
store a class name in a string. Usually if you’re doing this then
there’s
something wrong with your methodology and there’s a much more efficient
way to
get the right results.

The only real reason I can think that you’d have that in a string and
not simple
as the class constant is if you took it from user input. Hopefully you
aren’t
letting your users decide which classes get instantiated…!