.Map到Scala中的特定类型

时间:2014-07-24 17:06:49

标签: xml scala

我有几个案例类,结构类似:

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"))
  }

此代码是从我的原始代码修改但我试图尽可能接近它。我遇到的问题是pagessec[Unit]对象,但我希望它是List[Page]对象。我没有很棒的函数式编程背景。有什么我不理解的吗?

1 个答案:

答案 0 :(得分:2)

这是因为map lambda中的最后一行是一个赋值。赋值表达式的计算结果为Unit。你想要的是以下几点:

val pages = (bookFile \ "pages" ).map { pageNode =>
  loadPage(pageNode)
}

那会给你一个sec[Page]。要将其转换为List[Page],请在结果上使用toList方法。