Как создать целочисленный литерал как атрибут в выводе Scala XML?
Я ожидаю, что следующий код выдаст значение XML со следующим содержимым:
<TestInteger value="10"/>
Компилятор выдает ошибку
scala> import scala.xml._
import scala.xml._
scala> val x:Int = 10
x: Int = 10
scala> <TestInteger value={x}/>
<console>:8: error: overloaded method constructor UnprefixedAttribute with alternatives (String,Option[Seq[scala.xml.Node]],scala.xml.MetaData)scala.xml.UnprefixedAttribute <and> (String,String,scala.xml.MetaData)scala.xml.UnprefixedAttribute <and> (String,Seq[scala.xml.Node],scala.xml.MetaData)scala.xml.UnprefixedAttribute cannot be applied to (java.lang.String,Int,scala.xml.MetaData)
<TestInteger value={x}/>
Что я делаю неправильно? Разрешены ли целочисленные литералы в XML?
Я использую Scala 2.7.7
2 ответа
Похоже, что ваш XML нарушает спецификацию XML, в соответствии с этим каждое значение атрибута должно начинаться с двойной кавычки. Смотрите правило AttValue.
Редактировать:
После некоторого поиска в гугле кажется, что scala.xml.UnprefixedAttribute имеет Constructor, который поддерживает только строки в качестве значений, так как нет встроенного неявного преобразования из Int в String, этот ваш код не будет работать так же, как код:
val a : String = 10
Scala теперь не умеет автоматически конвертировать целые числа в строки, но следующий код будет работать
implicit def intToString(i:Int) = i.toString
val a : Int = 10
val b = <Test attr={a}/>
Scala XML не поддерживает никаких типов, кроме String
, Можно расширить библиотеку, чтобы добавить альтернативы Text
, но как таковой поддержки нет.