I just learned yesterday that different string values can intern to the
same symbols; for example:
p “!”.intern == “!@”.intern # => true
p “-(unary)”.intern == “-@”.intern # => true
There aren’t many such cases, but it makes life awkward if you’re
writing code where two such strings are valid input (e.g. “!” and “!@”
are both valid, if unusual, identifiers in Scheme s-expressions).
This seems to be a side-effect of the current implementation of unary
operators in Ruby 1.x – is it slated for change in Ruby 2.0?
I think it’d be nice if Ruby symbols were guaranteed to uniquely
represent string values, and x.intern.to_s == x were an invariant for