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.
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.
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.
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.
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
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...
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.
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.