Как создать целочисленный литерал как атрибут в выводе Scala XML? - PullRequest
3 голосов
/ 05 марта 2011

Я ожидаю, что следующий код выдаст значение 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 ]

3 голосов
/ 05 марта 2011

Похоже, ваш XML нарушает спецификацию XML в соответствии с this , каждое значение атрибута должно начинаться с двойной кавычки.См. Правило AttValue.
Редактировать :
После некоторого поиска в Google кажется, что scala.xml.UnprefixedAttribute имеет конструктор, который поддерживает только строки как значения, так как сборка отсутствует-при неявном преобразовании из Int в строку этот ваш код не будет работать так же, как код:

val a : String = 10

Scala теперь не выполняет автоматическое преобразование целых чисел в строки, однако следующий код будет работать

implicit def intToString(i:Int) = i.toString  
val a : Int = 10
val b  = <Test attr={a}/>
1 голос
/ 05 марта 2011

Scala XML не поддерживает никаких типов, кроме String. Один может расширить библиотеку, добавив альтернативы Text, но поддержки нет.

...