我是Scala的新手,我在一个完全用Scala编写的项目中工作,我想修改一个包含返回NodeSeq的方法的case类,但所有类参数都是Optional,我应该返回只是将可用参数解析为NodeSeq。
我不知道我做错了什么,但是它只是返回序列中第一个元素的方法:
case class Address(
street: Option[String],
number: Option[String],
complement: Option[String],
district: Option[String],
city: Option[String],
state: Option[String],
country: Option[String],
postalCode: Option[String]
) {
def toXml: NodeSeq =
{street.map(x => <street>{x}</street>).orNull}
{number.map(x => <number>{x}</number>).orNull}
{complement.map(x => <complement>{x}</complement>).orNull}
{district.map(x => <district>{x}</district>).orNull}
{city.map(x => <city>{x}</city>).orNull}
{state.map(x => <state>{x}</state>).orNull}
{country.map(x => <country>{x}</country>).orNull}
{postalCode.map(x => <postalCode>{x}</postalCode>).orNull}
}
答案 0 :(得分:2)
您的代码被解析为
def toXml: NodeSeq = {
street.map(x => <street>{x}</street>).orNull
}
{number.map(x => <number>{x}</number>).orNull}
{complement.map(x => <complement>{x}</complement>).orNull}
/* etc */
第一行是toXml
函数的主体,之后的所有内容都转到类的主体,因此是类构造函数的一部分。
在您的情况下,最简单的方法可能是采用空的NodeSeq
并将每个Option[Node]
添加到其中。
def toXml: NodeSeq = NodeSeq.Empty ++
street.map(x => <street>{x}</street>) ++
number.map(x => <number>{x}</number>) ++
complement.map(x => <complement>{x}</complement>) ++
district.map(x => <district>{x}</district>) ++
city.map(x => <city>{x}</city>) ++
state.map(x => <state>{x}</state>) ++
country.map(x => <country>{x}</country>) ++
postalCode.map(x => <postalCode>{x}</postalCode>)