scala では、"here docs" は 3 で始まり、終わります"
val str = """Hi,everyone"""
しかし、文字列に ? が含まれている場合はどうなります"""
か? 出力方法はHi,"""everyone
?
複数行の文字列リテラルを介したユニコードエスケープ\u0022
は役に立たないため、それらはまったく同じ3つの引用符として評価されるため、次のように連結することが唯一のチャンスです。
"""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
これにより、3つの二重引用符が付いた文字列が得られます。
私の知る限り、三重引用符を使用することはできません。仕様のセクション1.3.5には、次のように記載されています。
複数行の文字列リテラルは、三重引用符 """..."""で囲まれた文字のシーケンスです。文字の順序は任意ですが、最後に3つ以上の連続引用文字を含めることができる場合を除きます。文字は必ずしも印刷可能である必要はありません。改行またはその他の制御文字も許可されます。Unicodeエスケープは他の場所と同じように機能しますが、(§1.3.6)のエスケープシーケンスはどれも解釈されません。
したがって、文字列に3つの引用符を出力する場合でも、エスケープを使用して一重引用符の文字列を使用できます。
scala> val s = "Hi, \"\"\"everyone"
s: java.lang.String = Hi, """everyone
できません
scalaヒアドキュメントは生の文字列であり、文字列に三重引用符が必要な場合はエスケープコードを使用しないでください。文字列を使用してください-連結で追加してください