Deklarując sekwencję węzeł w Scali jako literały jesteś uzyskując scala.xml.NodeBuffer
który jest zmienny (rozciąga ArrayBuffer[scala.xml.Node]
która z kolei rozciąga Seq[scala.xml.Node]
):Dlaczego literały XML dostarczają zmienne obiekty w Scali?
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>)
to sprzeczne filozofię Scala korzystania niezmienne obiekty i programowanie funkcyjne. Dlaczego kolekcje są domyślnie niezmienne, ale literały XML (które są obywatelami pierwszej klasy) nie są w tym przypadku?
Czy istnieje jednak możliwość bezpiecznego zdefiniowania niezmiennej sekwencji węzłów za pomocą literałów XML?