Scala のXMLリテラル
ScalaにはXMLをリテラルとして書く機能がある.文字列としてではなく,XMLのオブジェクトとして直接解釈される.具体的には scala.xml.Elem という型になるようだ.しかも,Scalaの式を'{','}'で囲んで埋め込むことができる.
下記はReferenceからの引用.
val b = <book> <title>The Scala Language Specification</title> <version>{scalaBook.version}</version> <authors>{scalaBook.authors.mkList("", ", ", "")}</authors> </book>
なんらかのクォートで囲むでも無く,いきなり書くことができる.
おかしな(?)挙動
パーザは,XMLの開始っぽい部分を発見するとXMLモードに入る.なのでこんな変なことが起こる.
変数aを2にセット,1と比較.成功する.
scala> var a = 2 a: Int = 2 scala> var x = 1 < a x: Boolean = true
'<'と'a'との間のスペースを省略するとXML '<a'がXMLの開始と判断されてパーズエラー(!).
scala> var x = 1 <a <console>:1: error: ';' expected but $XMLSTART$< found. var x = 1 <a ^
逆の比較の場合には,スペースの省略が可能.
scala> var x = 1 >a x: Boolean = false