5
当声明Scala中的一个节点序列作为文字你得到scala.xml.NodeBuffer
,其是可变的(它延伸ArrayBuffer[scala.xml.Node]
这又延伸Seq[scala.xml.Node]
):为什么XML文字在Scala中产生可变对象?
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文字安全地定义不可变节点序列?