【发布时间】:2013-07-28 16:27:53
【问题描述】:
我有一个函数试图构建一个 JSON 对象,该对象包含存储在 Seq[A] 中的多个元组的表示,其中 A 是 (Loop, Option[User])。我的代码如下所示:
def loops = Action {
val page : Int = 1
val orderBy : Int = 1
val filter : String = ""
val jsonifyLoops : (Loop, Option[User]) => Map[String, String] = {
case (loop,user) =>
Map(
"name" -> loop.name,
"created_at" -> loop.createdAt.map(dateFormat.format).getOrElse(""),
"deleted_at" -> loop.deletedAt.map(dateFormat.format).getOrElse(""),
"user_name" -> user.map(_.name).getOrElse("")
)
}
Ok(toJson(Map(
"loops" -> toJson(
Loop.list( page = page, orderBy = orderBy, filter = ("%"+filter+"%") )
.items.map( jsonifyLoops )
)
)
))
}
Loops.list 产生一个Page[A],来自下面的帮助类:
case class Page[A](items: Seq[A], page: Int, offset: Long, total: Long) {
lazy val prev = Option(page - 1).filter(_ >= 0)
lazy val next = Option(page + 1).filter(_ => (offset + items.size) < total)
}
因此,Loops.list(...).items 应该给我一个Seq[(Loop, Option[User])],我应该能够在其上应用地图功能。我已经定义了我的 jsonifyLoops 函数来拥有我认为合适的原型,但我一定是做错了什么,因为编译器会抛出以下错误:
[error] [...] Application.scala:42: type mismatch;
[error] found : (models.Loop, Option[models.User]) => Map[String,String]
[error] required: (models.Loop, Option[models.User]) => ?
[error] .items.map( jsonifyLoops )
[error] ^
我做错了什么?
【问题讨论】: