当在 Scala 中将节点序列声明为文字时,您会产生一个scala.xml.NodeBuffer
可变的(它 extends ArrayBuffer[scala.xml.Node]
which 反过来 extends Seq[scala.xml.Node]
):
scala> val xml = <a /><b />
xml: scala.xml.NodeBuffer = ArrayBuffer(<a></a>, <b></b>)
scala> xml += <c />
res46: xml.type = ArrayBuffer(<a></a>, <b></b>, <c></c>)
scala> xml
res47: scala.xml.NodeBuffer = ArrayBuffer(<a></a>, <b></b>, <c></c>)
这与 Scala 使用不可变对象和函数式编程的理念相矛盾。为什么集合在默认情况下是不可变的,但在这种情况下 XML 文字(它们是一等公民)不是?
但是,是否可以通过使用 XML 文字安全地定义不可变节点序列?