Die Node scala documentation sagt:
Eine abstrakte Klasse XML mit Knoten eines markierten Baum darstellt. Diese Klasse enthält eine Implementierung einer Teilmenge von XPath für die Navigation.
Die Elem scala documentation sagt:
Der Fall Klasse Elem die Node-Klasse erweitert, ein unveränderliches Datenobjekts darstellt Bereitstellen ein XML-Element.
Wenn die eingebettete XML-Syntax in scala mit Elem
s hergestellt werden, weil es die einzige konkrete Umsetzung von Node
, die scala kennt ist.
Sie können keine Instanz eines Node
erstellen, ohne die abstrakten Methoden (child
und label
) zu implementieren. Elem
führt dies für Sie aus und bietet eine einfache Möglichkeit, Node
über eine Standard-API zu erstellen.
Elem
fügt auch eine Handvoll Hilfsmethoden hinzu, die oft nützlich sind. In Methoden, die zwischen der Annahme eines Node
oder Elem
entscheiden müssen, hängt es davon ab, ob diese zusätzlichen Funktionen innerhalb der Methode benötigt werden oder nicht. Wenn Sie eine Node
akzeptieren, sind Sie in einem flexibleren Status, um jede Implementierung dieser Klasse zu akzeptieren. Das Akzeptieren einer Elem
könnte Ihnen einige zusätzliche Helfer zur Verfügung stellen, aber es beschränkt Sie darauf, nur Elem
Implementierungen von Node
zu akzeptieren. Viele von Elem
's Methoden geben Node
(oder NodeSeq
) zurück, so dass Sie im Allgemeinen die allgemeinere Node
(oder NodeSeq
) anstelle einer Elem
akzeptieren möchten.
Jenseits gerade diese Diskussion, ist es im Allgemeinen gute Praxis als die am wenigsten spezifische Art möglich (Node
) als Parameter und gibt die meisten spezifische Art möglich (Elem
) zu akzeptieren:
def f(x: Node): Elem = ...
Spezifische Anwendungsfälle sollten noch in Betracht gezogen werden.
@ jwvh - es kompiliert einfach gut. editierter Beitrag zur besseren Übersichtlichkeit – doub1ejack
Ich fand diesen Blogbeitrag auf Scala XML nützlich - http://www.codecommit.com/blog/scala/working-with-scalas-xml-support. –