多行字符串文字仅在REPL和Worksheet中表现良好

时间:2013-06-19 11:39:35

标签: string scala line-breaks multiline string-literals

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

单:

val a = "hello\nworld"                        //> a  : String = hello
                                              //| world

val b = """hello
world"""                                      //> b  : String = hello
                                              //| world

a == b                                        //> res0: Boolean = true

普通Scala代码:

val a = "hello\nworld"

val b = """hello
world"""

println(a)
println(b)
println(a == b)

输出:

hello
world
hello
world
false

为什么比较在REPL和Worksheet中产生true,但在正常的Scala代码中为false?


有趣的是,b似乎比a长一个字符,所以我打印了Unicode值:

println(a.map(_.toInt))
println(b.map(_.toInt))

输出:

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)

这是否意味着多行字符串文字具有与平台相关的值?我在Windows上使用Eclipse。

1 个答案:

答案 0 :(得分:4)

我想这是因为source file encoding

尝试检查a.toList.lengthb.toList.length。似乎是b == "hello\r\nworld"

多行字符串文字值不取决于平台,而取决于源文件的编码。实际上,您将获得"""之间源文件中的确切内容。如果有\r\n,您可以在String中找到它。