Es ist überraschend, dass das s-Interpolator entkommt wieder einschaltet, auch bei Verwendung von Triple-Zitaten:
scala> "hi\nthere."
res5: String =
hi
there.
scala> """hi\nthere."""
res6: String = hi\nthere.
scala> s"""hi\nthere."""
res7: String =
hi
there.
Das s-Interpolator nicht weiß, dass es String-Teile bearbeitet, die ursprünglich dreifach zitierten waren . Daraus folgt:
scala> raw"""hi\nthere."""
res8: String = hi\nthere.
Dies ist wichtig, wenn Sie verwenden Schrägstriche auf andere Weise, wie reguläre Ausdrücke:
scala> val n = """\d"""
n: String = \d
scala> s"$n".r
res9: scala.util.matching.Regex = \d
scala> s"\d".r
scala.StringContext$InvalidEscapeException: invalid escape character at index 0 in "\d"
at scala.StringContext$.loop$1(StringContext.scala:231)
at scala.StringContext$.replace$1(StringContext.scala:241)
at scala.StringContext$.treatEscapes0(StringContext.scala:245)
at scala.StringContext$.treatEscapes(StringContext.scala:190)
at scala.StringContext$$anonfun$s$1.apply(StringContext.scala:94)
at scala.StringContext$$anonfun$s$1.apply(StringContext.scala:94)
at scala.StringContext.standardInterpolator(StringContext.scala:124)
at scala.StringContext.s(StringContext.scala:94)
... 33 elided
scala> s"""\d""".r
scala.StringContext$InvalidEscapeException: invalid escape character at index 0 in "\d"
at scala.StringContext$.loop$1(StringContext.scala:231)
at scala.StringContext$.replace$1(StringContext.scala:241)
at scala.StringContext$.treatEscapes0(StringContext.scala:245)
at scala.StringContext$.treatEscapes(StringContext.scala:190)
at scala.StringContext$$anonfun$s$1.apply(StringContext.scala:94)
at scala.StringContext$$anonfun$s$1.apply(StringContext.scala:94)
at scala.StringContext.standardInterpolator(StringContext.scala:124)
at scala.StringContext.s(StringContext.scala:94)
... 33 elided
scala> raw"""\d$n""".r
res12: scala.util.matching.Regex = \d\d
Danke, vermisste ich das Teil in docs, wo es heißt, dass es auch Interpolation der Fall ist. – ntn
Für die Aufzeichnung sagt das Scaladoc tatsächlich, was es tut. http://www.scala-lang.org/files/archive/nightly/2.11.x/api/2.11.x/index.html#[email protected](args:Any*):String –
Im Grunde sagen Sie das 'rohe' macht was' s'. Ich kann '" "" $ Literal String mit Substitution "" "'. Dies erklärt sowieso nicht die Notwendigkeit von "row". –