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