在使用IntelliJ Idea编写Scala代码时,我注意到它用于提供在第二对双引号中包含字符串文字。 «转换为“”“字符串”“”» - 它说。如果我同意 - 它只是在字符串之前添加了2个双引号,并且在字符串之后再添加2个引号,使我的字符串看起来像
val myString = """my string value"""
这有什么用呢?三重双引号是否意味着Scala中的特殊内容?
答案 0 :(得分:4)
使用IntelliJ smart String时,应该只有两种情况。
所以当你看到这个:
你应该以{{1}}结束。如果没有,则应将此报告为youtrack Scala project中的错误。
但是如果有三重双引号,那么IntelliJ正确地将您的简单字符串转换为多行字符串文字,其中illustrated by langref允许您定义:
"""
到
val text = "This\nIs\nA\nMultiline\nString"
Rosetta code mentions Scala 2.7和2.8之间的行为发生了变化:
在版本2.7上,三重双引号字符串在第三个连续引号结束,在版本2.8上它以一系列至少三个双引号的最后一个引号结束。
Scala 2.7:
val text = """This
Is
A
Multiline
String"""
Scala 2.8
scala> val error = """can't finish with a quote: """"
<console>:1: error: unterminated string
val error = """can't finish with a quote: """"
^
答案 1 :(得分:0)
三引号用于包含原始字符串。
原始字符串可以包含任何字符,包括换行符(如@VonC所示),但也包含转义序列。
一种常见的用法是简化正则表达式模式,例如:
val Date = """((\d\d)/(\d\d)/(\d{4}))|((\w{3}) (\d\d),\s?(\d{4}))""".r
而不是
val Date = "((\\d\\d)/(\\d\\d)/(\\d{4}))|((\\w{3}) (\\d\\d),\\s?(\\d{4}))".r
实际上并没有太大差异,但通常会欣赏正则表达式更简单。