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文字安全地定義不可變節點序列?