Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Scala 2.8.0中将二维数组写入xml_Xml_Scala_Arrays - Fatal编程技术网

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

如何在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 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”输出给出的

也许您可以将其(人员输入或结果输出)转换为列表,并获得更好的“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>
}