7

scala では、"here docs" は 3 で始まり、終わります"

val str = """Hi,everyone"""

しかし、文字列に ? が含まれている場合はどうなります"""か? 出力方法はHi,"""everyone

4

4 に答える 4

9

複数行の文字列リテラルを介したユニコードエスケープ\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は、内部使用のみのようです。

それでも、これを行うためのより簡単で簡単な方法があるかもしれません。

于 2010-07-26T17:36:38.277 に答える
5

これは私が同様の質問に投稿した完全なハックですが、ここでも機能します。ScalaのXML構造を中間形式として使用します。

val str = <a>Hi,"""everyone</a> text

これにより、3つの二重引用符が付いた文字列が得られます。

于 2010-07-26T22:03:41.070 に答える
2

私の知る限り、三重引用符を使用することはできません。仕様のセクション1.3.5には、次のように記載されています。

複数行の文字列リテラルは、三重引用符 """..."""で囲まれた文字のシーケンスです。文字の順序は任意ですが、最後に3つ以上の連続引用文字を含めることができる場合を除きます。文字は必ずしも印刷可能である必要はありません。改行またはその他の制御文字も許可されます。Unicodeエスケープは他の場所と同じように機能しますが、(§1.3.6)のエスケープシーケンスはどれも解釈されません。

したがって、文字列に3つの引用符を出力する場合でも、エスケープを使用して一重引用符の文字列を使用できます。


scala> val s = "Hi, \"\"\"everyone"
s: java.lang.String = Hi, """everyone
于 2010-07-26T17:16:22.713 に答える
2

できません

scalaヒアドキュメントは生の文字列であり、文字列に三重引用符が必要な場合はエスケープコードを使用しないでください。文字列を使用してください-連結で追加してください

于 2010-07-26T17:12:09.877 に答える