Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/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.xml.NodeSeq强制转换为元素?_Scala - Fatal编程技术网

如何将scala.xml.NodeSeq强制转换为元素?

如何将scala.xml.NodeSeq强制转换为元素?,scala,Scala,我试图减少元素列表 List(1, 2, 3).map{n => <a>{n}</a>}.reduce{(a,b)=> a ++ b} List(1,2,3).map{n=>{n}.reduce{(a,b)=>a++b} 但是我得到了这个错误 <console>:8: error: type mismatch; found : scala.xml.NodeSeq required: scala.xml.Elem List(

我试图减少元素列表

List(1, 2, 3).map{n => <a>{n}</a>}.reduce{(a,b)=> a ++ b}
List(1,2,3).map{n=>{n}.reduce{(a,b)=>a++b}
但是我得到了这个错误

<console>:8: error: type mismatch;
 found   : scala.xml.NodeSeq
 required: scala.xml.Elem
       List(1, 2, 3).map{n => <a>{n}</a>}.reduce{(a,b)=> a ++ b}
:8:错误:类型不匹配;
找到:scala.xml.NodeSeq
必需:scala.xml.Elem
列表(1,2,3).map{n=>n}.reduce{(a,b)=>a++b}

如何向元素强制转换NodeSeq?

在这种情况下,我不会使用
reduce
。相反,请尝试
foldLeft

List(1, 2, 3).map{n => <a>{n}</a>}.foldLeft(NodeSeq.Empty){(a,b)=> a ++ b}

List(1,2,3).在
map
上映射{n=>,
reduce
fold
,如果您是函数式编程新手,这可能会有所帮助。

除了joescii的答案之外,您甚至不需要使用
foldLeft
来生成节点序列。因为
List
已经是一个序列,
Seq[Node]
隐式转换为
NodeSeq
您只需编写以下内容:

val x : NodeSeq = List(1, 2, 3).map{n => <a>{n}</a>}

除其他答案外,将
NodeSeq
转换为
Elem
的最简单方法是:

val elemVar = nodeSeqVal(0)
如果您确定NodeSeq中始终存在唯一的节点,那么它就可以工作,否则您将丢失其余的数据

val elemVar = nodeSeqVal(0)