REPL:
scala> val a = "hello\nworld"
a: String =
hello
world
scala> val b = """hello
| world"""
b: String =
hello
world
scala> a == b
res0: Boolean = true
Worksheet:
val a = "hello\nworld" //> a : String = hello
//| world
val b = """hello
world""" //> b : String = hello
//| world
a == b //> res0: Boolean = true
Normal Scala code:
val a = "hello\nworld"
val b = """hello
world"""
println(a)
println(b)
println(a == b)
Output:
hello
world
hello
world
false
Why does the comparison yield true in the REPL and in the Worksheet, but false in normal Scala code?
Interesting, b
appears to be one char longer than a
, so I printed the Unicode values:
println(a.map(_.toInt))
println(b.map(_.toInt))
Output:
Vector(104, 101, 108, 108, 111, 10, 119, 111, 114, 108, 100)
Vector(104, 101, 108, 108, 111, 13, 10, 119, 111, 114, 108, 100)
Does that mean multi-line string literals have platform-dependent values? I use Eclipse on Windows.
I guess it's because of the source file encoding.
Try to check a.toList.length
and b.toList.length
. It seems b == "hello\r\nworld"
.
Multi-line string literal value depends not on the platform, but on the encoding of the source file. Actually you'll get exactly what you have in the source file between """
. If there is \r\n
you'll get it in your String
.