У меня есть код, который читает файл XML. Некоторые атрибуты элементов, которые мне нужно обработать, не являются обязательными. Я пытаюсь использовать вариант [T] для управления ими. Я написал следующее, чтобы изменить тип NodeSeq, возвращаемый оператором узла \
:
class NodeSeqWrapper(nodeSeq: NodeSeq) {
def textOption: Option[String] = {
val text = nodeSeq.text
if (text == null || text.length == 0) None else Some(text)
}
}
implicit def nodeSeqWrapper(nodeSeq: NodeSeq): NodeSeqWrapper =
new NodeSeqWrapper(nodeSeq)
, а затем вызвать его так:
(node \ "@attr").textOption.getOrElse("Some default value")
Если узел имеет атрибут "attr", этот код получает его значение. В противном случае возвращается значение «Некоторое значение по умолчанию».
Как я могу это улучшить? Есть ли способ свернуть определение класса в неявный метод? Есть ли лучший способ получить «необязательные» значения атрибутов? Я правильно использую вариант [T]
?