使用Scala中的映射链接多个方法调用

时间:2014-04-17 05:38:44

标签: scala scala-dispatch

我使用Dispatch 0.11获得以下代码:

def myHttpPut(urlToPut: String, params: Map[String, String]): Future[Response] = {
  val req = url(urlToPut).PUT
  params.foreach { case (k, v) => req.addParameter(k, v) }
  Http(req)
}

这不起作用,因为addParameter不会修改req - 相反,它会生成一个新的req对象,其中添加了参数(在这种情况下,将被丢弃)。写这个的最优雅的方法是什么,以便我基本上遍历params,用地图的每个键/值对调用addParameter,构建req直到我将它传递给Http(req)?

1 个答案:

答案 0 :(得分:4)

在这种情况下,您希望折叠params地图上,对每个键/值对应用一个函数,该函数也接受在前一个键上调用该函数的结果/价值对。

val request = params.foldLeft(url(urlToPut).PUT) { case (req, (k, v)) =>
  req.addParameter(k, v)
}
Http(request)

params.foldLeft获取一个起始值(ur(urlToPut).PUT),然后将其传递给此处定义的函数(case (req, (k, v)) => ...)。地图中的每个键/值对都会传递到此函数中,req将获取上一步的值(或初始步骤的起始值)。