Update: In Scala 2.8, the below is no longer true. String.reverse now returns a String rather than a RichString:
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
false, while"Im a string" == "Im a string".reverse.reverse.toStringreturns
true!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
String.reverse returns a RichString, and that == returns false when comparing a String and 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.
