如何在Scala 2.8.0中将二维数组写入xml
以下代码(从中复制)在Scala 2.7.7下运行良好,但在Scala 2.8.0(Beta 1,RC8)下无法正常运行如何在Scala 2.8.0中将二维数组写入xml,xml,scala,arrays,Xml,Scala,Arrays,以下代码(从中复制)在Scala 2.7.7下运行良好,但在Scala 2.8.0(Beta 1,RC8)下无法正常运行 导入scala.xml 班级人员(姓名:字符串,年龄:整数){ def toXml():xml.Elem= {name}{age} } def peopleToXml(人员:数组[Person]):xml.Elem={ {for{person的结果是返回一个真正的java数组,该数组根据普通java规则进行字符串化。这是由“[Ltype;@ref”输出给出的 也许您可以将其(
导入scala.xml
班级人员(姓名:字符串,年龄:整数){
def toXml():xml.Elem=
{name}{age}
}
def peopleToXml(人员:数组[Person]):xml.Elem={
{for{person的结果是返回一个真正的java数组,该数组根据普通java规则进行字符串化。这是由“[Ltype;@ref”输出给出的
也许您可以将其(人员输入或结果输出)转换为列表,并获得更好的“to string”语义
“一般”谈论新的Scala 2.8集合设置,但忽略了细节。Scala-lang.org上可能有更多的优点,并且一如既往,欢迎访问#Scala on freenode:-)此代码需要两次转换。首先,您必须将数组[xml.Elem]
转换为Seq[xml.Elem],以便理解
然后xml.NodeSeq
中的隐式转换将把这个转换为xml.NodeSeq
如果将peopleToXml
更改为以下内容,它将按预期工作:
def peopleToXml(people: Array[Person]): xml.Elem = {
val a: Seq[xml.Elem] = for {person <- people} yield person.toXml
<people>{a}</people>
}
def peopleToXml(人物:数组[Person]):xml.Elem={
val a:Seq[xml.Elem]=对于{person来说,正如pst所说,输出是一个真正的Java数组所期望的。2.7和2.8之间的变化之一是array[T]
现在正是一个真正的Java数组。新的集合设计意味着在Java数组上执行Scala集合操作(例如,在您的示例中,map
)将返回一个Java数组作为结果
for {person <- people} yield person.toXml
这意味着,当您使用Array
参数调用此方法时,该数组将隐式转换为一个行为与预期一致的WrappedArray
。这还有一个好处,即允许您使用非数组集合调用此方法。有点像这样,但无法解决如何(或在哪里)将Java数组转换回有用的东西。谢谢。
def peopleToXml(people: Array[Person]): xml.Elem = {
<people>{(for {person <- people} yield person.toXml): Seq[xml.Elem]}</people>
}
for {person <- people} yield person.toXml
def peopleToXml(people: Seq[Person]): xml.Elem = {
<people>{ for {person <- people} yield person.toXml }</people>
}