# String to Class

**URL:** <https://www.ruby-forum.com/t/string-to-class/128074>\
**Category:** Ruby\
**Created:** [February 4, 2008, 8:22pm UTC](https://www.ruby-forum.com/t/string-to-class/128074 "2008-02-04T20:22:32Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Roberto\_Eduardo\_Dec](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/e19adc/32.png) [@Roberto\_Eduardo\_Dec](https://www.ruby-forum.com/u/Roberto_Eduardo_Dec)\
**Post date:** [February 4, 2008, 8:22pm UTC](https://www.ruby-forum.com/t/string-to-class/128074/1 "2008-02-04T20:22:32Z")

</div>

Is it possible to convert a String into a Class id?

Something like ‘Array’.to\_class.new

---

<div class="post-metadata">

**Author:** ![Roberto\_Eduardo\_Dec](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/e19adc/32.png) [@Roberto\_Eduardo\_Dec](https://www.ruby-forum.com/u/Roberto_Eduardo_Dec)\
**Post date:** [February 4, 2008, 8:30pm UTC](https://www.ruby-forum.com/t/string-to-class/128074/2 "2008-02-04T20:30:21Z")

</div>

Roberto Eduardo Decurnex Gorosito wrote:

> Is it possible to convert a String into a Class id?
> 
> Something like ‘Array’.to\_class.new

Object.const\_get(“Array”).new

Wolfgang NÃ¡dasi-Donner

---

<div class="post-metadata">

**Author:** ![Roberto\_Eduardo\_Dec](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/e19adc/32.png) [@Roberto\_Eduardo\_Dec](https://www.ruby-forum.com/u/Roberto_Eduardo_Dec)\
**Post date:** [February 4, 2008, 10:13pm UTC](https://www.ruby-forum.com/t/string-to-class/128074/3 "2008-02-04T22:13:47Z")

</div>

On Feb 4, 2008, at 2:30 PM, Wolfgang NÃ¡dasi-Donner wrote:

> Roberto Eduardo Decurnex Gorosito wrote:
> 
> > Is it possible to convert a String into a Class id?
> > 
> > Something like ‘Array’.to\_class.new
> 
> Object.const\_get(“Array”).new
> 
> Wolfgang NÃ¡dasi-Donner

Or more generally,

# from Jim W. (based on email correspondence)

def constantize(camel\_cased\_word)  
camel\_cased\_word.  
sub(/^::/,‘’).  
split(“::”).  
inject(Object) { |scope, name| scope.const\_get(name) }  
end

Also, you can see how ActiveSupport does it for Rails:

# File vendor/rails/activesupport/lib/active\_support/inflector.rb,

line 245  
245: def constantize(camel\_cased\_word)  
246: unless /\A(?:::)?([A-Z]\w\*(?:::[A-Z]\w\*)\*)\z/ =~ camel\_cased\_word  
247: raise NameError, “#{camel\_cased\_word.inspect} is not a valid  
constant name!”  
248: end  
249:  
250: Object.module\_eval(“::#{$1}”, **FILE** , **LINE** )  
251: end

-Rob

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid
