# Change of Symbol to respond to intern?

**URL:** <https://www.ruby-forum.com/t/change-of-symbol-to-respond-to-intern/112047>\
**Category:** Ruby\
**Created:** [August 14, 2007, 5:32pm UTC](https://www.ruby-forum.com/t/change-of-symbol-to-respond-to-intern/112047 "2007-08-14T17:32:29Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [August 14, 2007, 5:32pm UTC](https://www.ruby-forum.com/t/change-of-symbol-to-respond-to-intern/112047/1 "2007-08-14T17:32:29Z")

</div>

I often find myself writing methods with the following form:

def foo(sym\_or\_str)  
@iv = sym\_or\_str  
end

when I go to compare later vs @iv, I can do:

def compare\_vs\_iv(arg)  
if arg.to\_s == @iv.to\_s then  
…  
end  
…  
end

but I can’t do:

if arg.intern == @iv.intern then  
…  
end

This is because symbols don’t respond to intern. Is there any good  
reason Symbol doesn’t respond to intern, while String responds to  
to\_s, Array responds, to to\_a, etc.? If not, I would like to propose  
that the intern method be added to Symbol at some point.

Thoughts?

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [August 14, 2007, 5:52pm UTC](https://www.ruby-forum.com/t/change-of-symbol-to-respond-to-intern/112047/2 "2007-08-14T17:52:31Z")

</div>

On 8/14/07, removed\_email\_address@domain.invalid [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> if arg.to\_s == @iv.to\_s then
> 
> This is because symbols don’t respond to intern. Is there any good  
> reason Symbol doesn’t respond to intern, while String responds to  
> to\_s, Array responds, to to\_a, etc.? If not, I would like to propose  
> that the intern method be added to Symbol at some point.
> 
> Thoughts?

Not sure of the differences (if any) between #intern and #to\_sym, but  
symbols will respond to #to\_sym and just return self.  
If there aren’t any differences between #intern and #to\_sym, I’d agree,  
#intern should be added to Symbol.

Chris

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [August 14, 2007, 6:51pm UTC](https://www.ruby-forum.com/t/change-of-symbol-to-respond-to-intern/112047/3 "2007-08-14T18:51:38Z")

</div>

> Thoughts?

irb(main):005:0\> :FOO.to\_sym  
=\> :FOO  
irb(main):006:0\> “FOO”.to\_sym  
=\> :FOO

Or you can always do something like

class Symbol  
def intern  
self  
end  
end

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [August 14, 2007, 7:18pm UTC](https://www.ruby-forum.com/t/change-of-symbol-to-respond-to-intern/112047/4 "2007-08-14T19:18:17Z")

</div>

unknown wrote:

> This is because symbols don’t respond to intern. Is there any good  
> reason Symbol doesn’t respond to intern, while String responds to  
> to\_s, Array responds, to to\_a, etc.? If not, I would like to propose  
> that the intern method be added to Symbol at some point.

irb(main):001:0\> class Symbol; alias\_method :intern, :to\_sym; end  
=\> Symbol  
irb(main):002:0\> :symbol.intern  
=\> :symbol

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [August 14, 2007, 7:16pm UTC](https://www.ruby-forum.com/t/change-of-symbol-to-respond-to-intern/112047/5 "2007-08-14T19:16:42Z")

</div>

On Aug 14, 11:26 am, removed\_email\_address@domain.invalid wrote:

> This is because symbols don’t respond to intern. Is there any good  
> reason Symbol doesn’t respond to intern, while String responds to  
> to\_s, Array responds, to to\_a, etc.? If not, I would like to propose  
> that the intern method be added to Symbol at some point.

Symbol responds to #to\_sym, as does String. Will that do?

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [August 15, 2007, 6:37pm UTC](https://www.ruby-forum.com/t/change-of-symbol-to-respond-to-intern/112047/6 "2007-08-15T18:37:11Z")

</div>

- [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) (22:00) schrieb:

> I knew about overloading Symbol, but I think we can all agree that’s  
> not really a practical solution for use in a bigger system. I didn’t  
> know about to\_sym though, and I think that’s perfect! Shows what I  
> get for thinking that I knew the core API pretty well…

But probably want to do the to\_s anyway, because that doesn’t pollute  
the symbol table. Strings can be garbage collected, symbols stay for  
ever.

mfg, simon … l

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [August 14, 2007, 10:06pm UTC](https://www.ruby-forum.com/t/change-of-symbol-to-respond-to-intern/112047/7 "2007-08-14T22:06:03Z")

</div>

On Aug 14, 11:26 am, removed\_email\_address@domain.invalid wrote:

> ```
> ...
> 
> ```
> 
> This is because symbols don’t respond to intern. Is there any good  
> reason Symbol doesn’t respond to intern, while String responds to  
> to\_s, Array responds, to to\_a, etc.? If not, I would like to propose  
> that the intern method be added to Symbol at some point.
> 
> Thoughts?

I knew about overloading Symbol, but I think we can all agree that’s  
not really a practical solution for use in a bigger system. I didn’t  
know about to\_sym though, and I think that’s perfect! Shows what I  
get for thinking that I knew the core API pretty well…

Thanks… --Tom
