change of Symbol to respond to intern?

T

thomas.macklin

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?
 
R

Rubén Medellín

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
 
R

rmagick

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?
 
I

Ilan Berci

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
 
T

thomas.macklin

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?

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
 
S

Simon Krahnke

* said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,014
Latest member
BiancaFix3

Latest Threads

Top