Quando si dichiara una sequenza nodo Scala come letterali cedi un scala.xml.NodeBuffer
che è mutabile (si estende ArrayBuffer[scala.xml.Node]
che a sua volta si estende Seq[scala.xml.Node]
):Perché i letterali XML restituiscono oggetti mutabili in 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>)
Questo contraddice filosofia di Scala di utilizzare oggetti immutabili e programmazione funzionale. Perché le collezioni sono immutabili per impostazione predefinita, ma i letterali XML (che sono cittadini di prima classe) non sono in questo caso?
Tuttavia, è possibile definire in modo sicuro una sequenza di nodi immutabile utilizzando valori letterali XML?