xml - Scala 2.8.0中如何将二维数组写入xml

标签 xml scala arrays

以下代码(从 a question from about a year ago 复制)在 Scala 2.7.7 下运行良好,但在 Scala 2.8.0(Beta 1、RC8)下运行不正常。

import scala.xml

class Person(name : String, age : Int) {
    def toXml(): xml.Elem =
        <person><name>{ name }</name><age>{ age }</age></person>
}

def peopleToXml(people: Array[Person]): xml.Elem = {
    <people>{ for {person <- people} yield person.toXml }</people>
}

val data = Array(new Person("joe",40), new Person("mary", 35))

println(peopleToXml(data))

输出(根据 2.7.7)应该是:

<people><person><name>joe</name><age>40</age></person><person><name>mary</name><age>35</age></person></people>

但结果是:

<people>\[Lscala.xml.Elem;@17821782</people>

我怎样才能让它像在 2.7.x 中那样运行?

最佳答案

正如 pst 所说,输出是您对真正的 Java 数组的期望。 2.7 和 2.8 之间的变化之一是 Array[T] 现在完全是一个真正的 Java 数组。新的集合设计意味着对 Java 数组(例如 map 在您的示例中)执行 Scala 集合操作将返回一个 Java 数组作为结果。这意味着以下

for {person <- people} yield person.toXml

过去不返回 Java 数组,但现在返回。您可以通过更改 peopleToXml 方法的 people 参数的类型来解决此问题,如下所示:

def peopleToXml(people: Seq[Person]): xml.Elem = {
    <people>{ for {person <- people} yield person.toXml }</people>
}

这意味着当您使用 Array 参数调用此方法时,该数组将隐式转换为行为如您预期的 WrappedArray。这还有一个好处,即允许您使用非数组集合调用此方法。

关于xml - Scala 2.8.0中如何将二维数组写入xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2688445/

相关文章:

xmllint : validate an XML file against two XSD schemas (envelope/payload)

jquery解析xml并按元素值分组

xml - 是否有 XSLT 名称元素?

java - 如何更改抽屉导航部分标题的颜色

java - System.arraycopy() 具有原始和对象引用的浅拷贝或深拷贝

scala - 如何使用 Scala 项目运行 sbt-revolver?

scala - 如何在 MemSql 中释放已删除数据库的空间

scala - 在 Scala 中对元组列表使用 groupBy

arrays - 如何以这种方式分割字符串?

java - 如何将数字存储在数组中?