Update: In Scala 2.8, the below is no longer true.
String.reverse now returns a
String rather than a
scala> "a".reverse == "a"
res0: Boolean = true
In the Scala programming language, there is a class called
RichString, that adds features to the underlying Java
String. In the current version of Scala (2.7.2.final), this leads to some odd behaviour:
"Im a string" == "Im a string".reverse.reversereturns
"Im a string" == "Im a string".reverse.reverse.toStringreturns
Just to make your head spin, the following code does indeed work as expected:
val str :String = "Im a string".reverse.reversewhile
println(str == "Im a string") // prints "true"
val str = "Im a string".reverse.reversedoes not.
println(str == "Im a string") // prints "false"
The explanation is that
RichString, and that
falsewhen comparing a
RichString, even though it is the "same" string (as in the example above).
If I understand it correctly, this oddity will be fixed in future releases of Scala.
(And no, Scala's
==is not the same as Java's ditto. It means "equal objects" rather than "refers to the same instance of an object".)
Scala mailing list item here.