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 non-empty strings.
-mental
This may be a question for the Ruby Core list?
···
On 5/5/06, MenTaLguY <mental@rydia.net> wrote:
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 non-empty
strings.
-mental
MenTaLguY <mental@rydia.net> writes:
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 non-empty strings.
+1
···
-mental
--
Christian Neukirchen <chneukirchen@gmail.com> http://chneukirchen.org