2011-11-07 22 views
12
scala> val count = 7 
count: Int = 7 

đặt đó vào một thuộc tính XML cho một lỗi:XML - lỗi: quá tải phương pháp constructor UnprefixedAttribute với lựa chọn thay thế

scala> val x = <element count={count}/> 
<console>:8: error: overloaded method constructor UnprefixedAttribute with alternatives: 
    (key: String,value: Option[Seq[scala.xml.Node]],next: scala.xml.MetaData)scala.xml.UnprefixedAttribute <and> 
    (key: String,value: String,next: scala.xml.MetaData)scala.xml.UnprefixedAttribute <and> 
    (key: String,value: Seq[scala.xml.Node],next1: scala.xml.MetaData)scala.xml.UnprefixedAttribute 
cannot be applied to (java.lang.String, Int, scala.xml.MetaData) 
     val x = <element count={count}/> 

Trả lời

23

Đầu vào các thuộc tính XML phải Strings. Số nguyên và đối tượng sẽ không tự động được chuyển đổi thành Chuỗi bằng phương thức toString của chúng. Ví dụ, nếu bạn đã định nghĩa một lớp Kích thước sử dụng một enum Đơn vị:

scala> object Units extends Enumeration { 
    | type Units = Value 
    | val COUNT = Value("count") 
    | val LB = Value("pounds") 
    | val OZ = Value("ounces") 
    | val GRAM = Value("grams") 
    | val KG = Value("kilograms") 
    | val GAL = Value("gallons") 
    | val QT = Value("quarts") 
    | val PINT = Value("pints") 
    | val FL_OZ = Value("fluid ounces") 
    | val L = Value("liters") 
    | } 
defined module Units 


scala> class Size(val value: Double, val unit: Units.Units) { 
    | override def toString = value + " " + unit.toString 
    | } 
defined class Size 

tạo một thể hiện của Kích thước:

scala> val seven = new Size(7, Units.COUNT) 
seven: Size = 7.0 count 

sau đó đã cố gắng để đặt kích thước của bạn vào một thuộc tính XML, bạn vẫn sẽ nhận được một lỗi:

scala> val x = <element size={seven}/> 
<console>:10: error: overloaded method constructor UnprefixedAttribute with alternatives: 
    (key: String,value: Option[Seq[scala.xml.Node]],next: scala.xml.MetaData)scala.xml.UnprefixedAttribute <and> 
    (key: String,value: String,next: scala.xml.MetaData)scala.xml.UnprefixedAttribute <and> 
    (key: String,value: Seq[scala.xml.Node],next1: scala.xml.MetaData)scala.xml.UnprefixedAttribute 
cannot be applied to (java.lang.String, Size, scala.xml.MetaData) 
     val x = <element size={seven}/> 
       ^

Bạn phải gọi phương thức toString một cách rõ ràng. Công trình này:

scala> val x = <element count={count.toString} size={seven.toString}/> 
x: scala.xml.Elem = <element size="7.0 count" count="7"></element> 
Các vấn đề liên quan