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…!

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs