Đầ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>