我使用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)?
答案 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
将获取上一步的值(或初始步骤的起始值)。