Node scala documentation говорит:
Абстрактный класс, представляющий XML с узлами раскрашенного дерева. Этот класс содержит реализацию подмножества XPath для навигации.
Elem scala documentation говорит:
Корпуса класс Эль расширяет класс Node, обеспечивая неизменный объект данных, представляющий собой элемент XML.
При использовании встроенного синтаксиса XML в Скале Elem
s производится, потому что это только конкретная реализация Node
, что знает о Scala.
Невозможно создать экземпляр Node
без абстрактных методов (child
и label
). Elem
выполняет это для вас и обеспечивает простой способ создания Node
через стандартный API.
Elem
также добавляет несколько вспомогательных методов, которые часто полезны. В методах, которые необходимо решить между принятием Node
или Elem
, зависит от того, нужны ли эти дополнительные функции внутри метода. Принятие Node
оставляет вас в более гибком состоянии, чтобы принять любую реализацию этого класса. Принятие Elem
может предоставить вам дополнительные помощники, но это ограничивает принятие только Elem
реализаций Node
. Многие из методов Elem
возвращают Node
(или NodeSeq
), поэтому в целом вы хотите принять более общие Node
(или NodeSeq
), а не Elem
.
Помимо всего этого обсуждения, это обычно считается хорошей практикой принимать наименее конкретный тип возможного (Node
) в качестве параметра и возвращает наиболее конкретный тип возможного (Elem
):
def f(x: Node): Elem = ...
Конкретные случаи использования, должны по-прежнему быть на рассмотрении.
@jwvh - он компилируется просто отлично. отредактированный пост для ясности. – doub1ejack
Я нашел это сообщение в блоге на Scala XML, чтобы быть полезным - http://www.codecommit.com/blog/scala/working-with-scalas-xml-support. –