在 scala 中,“here docs”以 3 开头和结尾"
val str = """Hi,everyone"""
但是如果字符串包含"""
? 如何输出Hi,"""everyone
?
由于多行字符串文字中的 unicode 转义\u0022
对您没有帮助,因为它们将被评估为相同的三个引号,您唯一的机会就是像这样连接:
"""Hi, """+"""""""""+"""everyone"""
好消息是,scala 编译器足够聪明,可以解决这个问题,因此它会在编译时生成一个字符串。
至少,是这么scala -print
说的。
object o {
val s = """Hi, """+"""""""""+"""everyone"""
val t = "Hi, \"\"\"everyone"
}
并使用scala -print
→</p>
Main$$anon$1$o.this.s = "Hi, """everyone";
Main$$anon$1$o.this.t = "Hi, """everyone";
但是请注意,您不能以这种方式输入。输出的格式scala -print
似乎仅供内部使用。
不过,可能有一些更简单、更直接的方法来做到这一点。
这是我在类似问题上发布的完全破解,但它也适用于这里:使用 Scala 的 XML 结构作为中间格式。
val str = <a>Hi,"""everyone</a> text
这将为您提供一个带有三个双引号的字符串。
你不能
scala heredocs 是原始字符串,如果您需要在字符串中使用三引号,请不要使用任何转义码使用字符串连接添加它们
据我所知,你不能使用三引号。在规范中,第 1.3.5 节指出:
多行字符串文字是用三引号 """ ... """ 括起来的字符序列。字符序列是任意的,除了它可能仅在最后包含三个或更多连续引号字符。字符不一定是可打印的;也允许换行符或其他控制字符。Unicode 转义与其他任何地方一样工作,但 (§1.3.6) 中的任何转义序列都不会被解释。
所以如果你想在一个字符串中输出三个引号,你仍然可以使用带有转义的单引号字符串:
scala> val s = "Hi, \"\"\"everyone"
s: java.lang.String = Hi, """everyone