メソッドごとに生成されるコードはわずかに異なります。
def h:play.api.templates.Html = {
_display_(
Seq[Any](format.raw("""<br />"""))
)
}
def i = {{Html("<br />")}}
作成に使用される_display_メソッドは、渡された のすべての要素に対してha を実行することになりますfoldLeftSeq
これにより、次の結果が得られます。
Html("") + Html("<br />")
ケース クラスはHtml、変更可能な によってサポートされていることが判明しましたStringBuilder。
case class Html(text: String) extends Appendable[Html] with Content with play.mvc.Content {
val buffer = new StringBuilder(text)
/**
* Appends this HTML fragment to another.
*/
def +(other: Html): Html = {
buffer.append(other.buffer)
this
}
override def toString = buffer.toString
/**
* Content type of HTML (`text/html`).
*/
def contentType: String = "text/html"
def body: String = toString
}
これは、 の値がtext最初Htmlの のtext値にのみ設定されることを意味します。Htmlメソッドを介して新しいを作成するときはいつでも、+変更するだけStringBuilderです。
例えば
val html = Html("1") + Html("2")
html.text == "1"
html.toString == "12"
html.body == "12"
これはtextパターン マッチングに使用される値であるため、パターン マッチングで使用する能力が事実上損なわれます。
例えば
(Html("1") + Html("2")) match { case Html("1") => "broken" } // returns "broken"