# Instantiate a class dynamically

**URL:** <https://www.ruby-forum.com/t/instantiate-a-class-dynamically/158510>\
**Category:** Ruby\
**Created:** [January 24, 2009, 2:15am UTC](https://www.ruby-forum.com/t/instantiate-a-class-dynamically/158510 "2009-01-24T02:15:46Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 24, 2009, 2:15am UTC](https://www.ruby-forum.com/t/instantiate-a-class-dynamically/158510/1 "2009-01-24T02:15:46Z")

</div>

Hey All,

If I have the name of a class in a string var, is it possible to get a  
new instance of that class (and if so, how)? The following do _not_  
work:

my\_string = “Hash”

my\_object = Class(my\_string)  
my\_object = Class.new(my\_string)  
my\_object = Object.new(my\_string)

Thanks!

-Roy

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 24, 2009, 2:30am UTC](https://www.ruby-forum.com/t/instantiate-a-class-dynamically/158510/2 "2009-01-24T02:30:23Z")

</div>

Le 24 janvier 2009 à 02:12, removed\_email\_address@domain.invalid a écrit :

> my\_object = Object.new(my\_string)  
> my\_object = Object.const\_get(my\_string.to\_sym).new

(The to\_sym is mandatory in ruby 1.9.)

Fred

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 24, 2009, 2:31am UTC](https://www.ruby-forum.com/t/instantiate-a-class-dynamically/158510/3 "2009-01-24T02:31:33Z")

</div>

On Jan 23, 5:25 pm, “F. Senault” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > my\_object = Class(my\_string)  
> > And a new one will be born  
> > Any time tomorrow I’ll get sick of asking why  
> > Sick of all the darkness I have worn (K’s Choice, Shadow Man)

Awesome cool–looks like I can even pass arguments into new() (which  
would have been my next question).

Thanks very much!

-Roy

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 24, 2009, 2:45am UTC](https://www.ruby-forum.com/t/instantiate-a-class-dynamically/158510/4 "2009-01-24T02:45:36Z")

</div>

“removed\_email\_address@domain.invalid” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> my\_object = Object.new(my\_string)  
> Class names are used to define constants in the Module module:

irb(main):014:0\> className=“Hash”  
“Hash”  
irb(main):015:0\> Module.constants.member?(className)  
true

Therefore you should be able to get the class with:

irb(main):016:0\> Module.class\_eval(className)  
Hash

and make an instance with:

irb(main):017:0\> Module.class\_eval(className).new  
{}

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 24, 2009, 2:44am UTC](https://www.ruby-forum.com/t/instantiate-a-class-dynamically/158510/5 "2009-01-24T02:44:25Z")

</div>

Hi –

On Sat, 24 Jan 2009, F. Senault wrote:

> > my\_object = Class(my\_string)  
> > my\_object = Class.new(my\_string)  
> > my\_object = Object.new(my\_string)
> 
> my\_object = Object.const\_get(my\_string.to\_sym).new
> 
> (The to\_sym is mandatory in ruby 1.9.)

I don’t think so:

$ ruby19 -ve ‘p Object.const\_get(“String”)’  
ruby 1.9.1 (2008-12-30 patchlevel-0 revision 21203)  
[i386-darwin9.5.0]  
String

David

–  
David A. Black / Ruby Power and Light, LLC  
Ruby/Rails consulting & training: [http://www.rubypal.com](http://www.rubypal.com)  
Coming in 2009: The Well-Grounded Rubyist ([The Well-Grounded Rubyist](http://manning.com/black2))

[http://www.wishsight.com](http://www.wishsight.com) =\> Independent, social wishlist management!

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 27, 2009, 7:15pm UTC](https://www.ruby-forum.com/t/instantiate-a-class-dynamically/158510/6 "2009-01-27T19:15:46Z")

</div>

Le 24 janvier à 03:16, James G. a écrit :

> On Jan 23, 2009, at 7:28 PM, F. Senault wrote:
> 
> > my\_object = Object.const\_get(my\_string.to\_sym).new
> > 
> > (The to\_sym is mandatory in ruby 1.9.)
> 
> Na.

You are, of course, perfectly right. I should do my tests _after_ the  
coffee… 🙂

Fred

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 24, 2009, 3:23am UTC](https://www.ruby-forum.com/t/instantiate-a-class-dynamically/158510/7 "2009-01-24T03:23:02Z")

</div>

On Jan 23, 2009, at 7:28 PM, F. Senault wrote:

> my\_object = Object.const\_get(my\_string.to\_sym).new
> 
> (The to\_sym is mandatory in ruby 1.9.)

Na.

$ ruby\_dev -ve ‘p File.const\_get(“Stat”)’  
ruby 1.9.1 (2008-12-30 patchlevel-0 revision 21203) [i386- darwin9.6.0]  
File::Stat

Ruby’s a pretty smart gal. 😉

James Edward G. II
