我有几个案例类,结构类似:
case class Book(title: String, pages: Int, pages: List[Page])
case class Page(words: String, otherField: String)
我正在尝试使用Scala中的map
从XML文件加载它们object Parser {
def loadBook(): Book = {
val bookFile = scala.xml.XML.loadFile("/conf/PageConfig.xml")
val pages = (bookFile \\ "pages" ).map { pageNode =>
val page = loadPage(pageNode)
}
Book((bookFile \ "title").text, (bookFile \ "pages").text, pages)
}
def loadPage(pageNode): Page = {
Page((pageNode \ "words"), (pageNode \ "otherField"))
}
此代码是从我的原始代码修改但我试图尽可能接近它。我遇到的问题是pages
是sec[Unit]
对象,但我希望它是List[Page]
对象。我没有很棒的函数式编程背景。有什么我不理解的吗?
答案 0 :(得分:2)
这是因为map
lambda中的最后一行是一个赋值。赋值表达式的计算结果为Unit
。你想要的是以下几点:
val pages = (bookFile \ "pages" ).map { pageNode =>
loadPage(pageNode)
}
那会给你一个sec[Page]
。要将其转换为List[Page]
,请在结果上使用toList
方法。