如何在scala的"here docs"中输出"""?

Fre*_*ind 7 scala heredoc rawstring

在scala中,"here docs"开始并以3结束 "

val str = """Hi,everyone"""
Run Code Online (Sandbox Code Playgroud)

但是如果字符串包含"""?如何输出Hi,"""everyone

Deb*_*ski 9

由于unicode通过\u0022多行字符串文字转义将无法帮助您,因为它们将被评估为相同的三个引号,您唯一的机会是连接如下:

"""Hi, """+"""""""""+"""everyone"""
Run Code Online (Sandbox Code Playgroud)

好处是,scala编译器足够聪明,可以解决这个问题,因此在编译时会产生一个单独的字符串.

至少,这scala -print就是说的.

object o {
  val s = """Hi, """+"""""""""+"""everyone"""
  val t = "Hi, \"\"\"everyone"
}
Run Code Online (Sandbox Code Playgroud)

并使用scala -print

Main$$anon$1$o.this.s = "Hi, """everyone";
Main$$anon$1$o.this.t = "Hi, """everyone";
Run Code Online (Sandbox Code Playgroud)

但请注意,您无法以这种方式输入.scala -print输出的格式似乎仅供内部使用.

尽管如此,可能还有一些更简单,更直接的方法.


pr1*_*001 5

这是一个完全黑客,我发布了类似的问题,但它也适用于此:使用Scala的XML结构作为中间格式.

val str = <a>Hi,"""everyone</a> text
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个带有三个双引号的字符串.