# String.to\_sym?

**URL:** <https://www.ruby-forum.com/t/string-to-sym/98595>\
**Category:** Ruby\
**Created:** [December 12, 2005, 4:15pm UTC](https://www.ruby-forum.com/t/string-to-sym/98595 "2005-12-12T16:15:06Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![robertj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/a9adbd/32.png) [@robertj](https://www.ruby-forum.com/u/robertj)\
**Post date:** [December 12, 2005, 4:15pm UTC](https://www.ruby-forum.com/t/string-to-sym/98595/1 "2005-12-12T16:15:06Z")

</div>

hi,

is there a String#to\_sym method anywhere in the  
statndard lib? i couldnt find anything like that  
but maybe i missed it.

its easy enough to write

class String  
def to\_sym  
eval “:#{self}”  
end  
end

just want to check if its there already.

ciao robertj

---

<div class="post-metadata">

**Author:** ![robertj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/a9adbd/32.png) [@robertj](https://www.ruby-forum.com/u/robertj)\
**Post date:** [December 12, 2005, 4:30pm UTC](https://www.ruby-forum.com/t/string-to-sym/98595/2 "2005-12-12T16:30:17Z")

</div>

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

> hi,

> is there a String#to\_sym method anywhere in the  
> statndard lib? i couldnt find anything like that  
> but maybe i missed it.

It’s called “intern”, because Ruby internalizes the string into a  
symbol.  
And it’s rather more efficient than the eval method you propose.

irb(main):001:0\> “somestring”.intern  
=\> :somestring

---

<div class="post-metadata">

**Author:** ![robertj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/a9adbd/32.png) [@robertj](https://www.ruby-forum.com/u/robertj)\
**Post date:** [December 12, 2005, 4:36pm UTC](https://www.ruby-forum.com/t/string-to-sym/98595/3 "2005-12-12T16:36:31Z")

</div>

Hi,

At Tue, 13 Dec 2005 00:27:38 +0900,  
Mark J.Reed wrote in [ruby-talk:170247]:

> > is there a String#to\_sym method anywhere in the  
> > statndard lib? i couldnt find anything like that  
> > but maybe i missed it.
> 
> It’s called “intern”, because Ruby internalizes the string into a symbol.

String#to\_sym is also an alias in 1.8 or later.

---

<div class="post-metadata">

**Author:** ![robertj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/a9adbd/32.png) [@robertj](https://www.ruby-forum.com/u/robertj)\
**Post date:** [December 12, 2005, 7:07pm UTC](https://www.ruby-forum.com/t/string-to-sym/98595/4 "2005-12-12T19:07:08Z")

</div>

Quoting robertj [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> hi,
> 
> is there a String#to\_sym method anywhere in the  
> statndard lib? i couldnt find anything like that  
> but maybe i missed it.

If you’ve got a reasonably recent version of Ruby, yes. I don’t  
know about 1.6 or earlier.

> its easy enough to write
> 
> class String  
> def to\_sym  
> eval “:#{self}”  
> end  
> end

If you had to write one yourself, you’d want:

class String  
alias to\_sym intern  
end

eval’ing “:#{self}” won’t work if the string has spaces or anything  
like that. In general, eval’ing strings should be an absolute last  
resort in code, because it is very difficult to make reliable.

-mental

---

<div class="post-metadata">

**Author:** ![robertj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/a9adbd/32.png) [@robertj](https://www.ruby-forum.com/u/robertj)\
**Post date:** [December 12, 2005, 7:28pm UTC](https://www.ruby-forum.com/t/string-to-sym/98595/5 "2005-12-12T19:28:12Z")

</div>

Hmm… What version of Ruby are you using? You should be able to use  
String#to\_sym presently.

Originally the method for doing so was #intern. Though I haven’t heard  
any specific verbage to the effect from offical sources, I would highly  
recommend never using #intern again. Use #to\_sym instead.

T.

---

<div class="post-metadata">

**Author:** ![robertj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/a9adbd/32.png) [@robertj](https://www.ruby-forum.com/u/robertj)\
**Post date:** [December 12, 2005, 9:07pm UTC](https://www.ruby-forum.com/t/string-to-sym/98595/6 "2005-12-12T21:07:36Z")

</div>

removed\_email\_address@domain.invalid writes:

> > its easy enough to write
> > 
> > class String  
> > def to\_sym  
> > eval “:#{dump}”

---

<div class="post-metadata">

**Author:** ![robertj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/a9adbd/32.png) [@robertj](https://www.ruby-forum.com/u/robertj)\
**Post date:** [December 13, 2005, 11:33am UTC](https://www.ruby-forum.com/t/string-to-sym/98595/7 "2005-12-13T11:33:56Z")

</div>

hi,

obviously its there IF you try to call it.  
prblem on my side was that i looked in the docs  
[http://www.ruby-doc.org/docs/ProgrammingRuby/](http://www.ruby-doc.org/docs/ProgrammingRuby/)  
and there is no mention of #to\_sym anywhere  
so i thought its no available.  
my fault 🙂

ciao robertj

---

<div class="post-metadata">

**Author:** ![robertj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/a9adbd/32.png) [@robertj](https://www.ruby-forum.com/u/robertj)\
**Post date:** [December 13, 2005, 3:43pm UTC](https://www.ruby-forum.com/t/string-to-sym/98595/8 "2005-12-13T15:43:59Z")

</div>

robertj wrote:

> hi,
> 
> obviously its there IF you try to call it.  
> prblem on my side was that i looked in the docs  
> [Programming Ruby: The Pragmatic Programmer's Guide](http://www.ruby-doc.org/docs/ProgrammingRuby/)  
> and there is no mention of #to\_sym anywhere  
> so i thought its no available.  
> my fault 🙂

I see. FYI for the future. The best place to check first is always  
using ri:

$ ri to\_sym

More than one method matched your request. You can refine  
your search by asking for information on one of:

```
 Fixnum#to_sym, String#to_sym, Symbol#to_sym

```

$ ri String#to\_sym

…

T.
