Change of Symbol to respond to intern?

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?

On 8/14/07, [email protected] [email protected] 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

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

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

On Aug 14, 11:26 am, [email protected] 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?

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

On Aug 14, 11:26 am, [email protected] 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