Scala Essentials:文字列内挿

1174 ワード

文字列補間Scalaは高度に拡張性のあるプログラム設計言語であり、微小なカーネルを維持しているが、無限の拡張能力を持っている.たとえば、「文字列補間」機能では、Scala言語はこの機能をオリジナルでサポートするのではなく、クラスライブラリの拡張によって実現されます.
println(s"$name is $age years old.") Rubyの文字列補間機能に対して、Scalaは文字列の前にsの接頭辞を加えて、そんなに優雅ではありませんが、このような設計は良好な拡張性を交換しました.
s,f,rawなどの他の形式の文字列の内挿機能をサポートする.ユーザーのカスタム文字列の内挿機能をサポートする.本質を分析する.
package scala
case class StringContext(parts: String*) {
  def s(args: Any*): String = ???
  def f(args: Any*): String = ???
  def raw(args: Any*): String = ???
}

sの本質は単なる関数にすぎない.
f""
f関数はフォーマットされた文字列内挿機能をサポートする.
f"$name%s is ${height}%2.2f meters tail"
//   
"%s is %2.2f meters tail".format(name, height)

でも、String.formatの可読性はfに比べて劣る.
raw
rawは、「」「string」「」の三重引用符の文字列定数に似た、エスケープされない文字シーンの文字列補間を表す.
raw"a
b" // """a
b"""

カスタム補間関数
文字列の内挿をカスタマイズできる定義は,Scalaの拡張性の哲学的思考を徹底的に体現している.たとえば、JSONの文字列表示を定義します.
implicit class JsonHelper(val sc: StringContext) extends AnyVal {
  def json(args: Any*): JSONObject = ???
}
val conf = json"{ a: $a }"