gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:50:41 25 4
gpt4 key购买 nike

以下代码(从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com