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

···

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

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

···

On 2/14/07, Luca Scaljery <lcalje@gmail.com> 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 ?

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

···

On 2/14/07, Luca Scaljery <lcalje@gmail.com> wrote:

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 ?

Maybe you want to have a look at this:

var1 = Object.const_get(var2)

Kind regards
Nicolai

···

2007/2/14, Luca Scaljery <lcalje@gmail.com>:

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

--
Posted via http://www.ruby-forum.com/\.

Hi

Thanks for the solution!
It works!!

LuCa

···

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

Luca Scaljery <lcalje <at> 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..!

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

···

On 2/14/07, Lyle Johnson <lyle.johnson@gmail.com> wrote:

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

Lyle Johnson wrote:

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

should be #const_get()

···

--
Posted via http://www.ruby-forum.com/\.