1

我使用 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 对象,并添加了参数(在这种情况下,它被丢弃了)。写这个的最优雅的方法是什么,以便我基本上循环参数,使用映射的每个键/值对调用 addParameter,建立 req 直到我将它传递给 Http(req)?

4

1 回答 1

5

在这种情况下,您希望折叠映射,对每个键/值对应用一个函数,该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映射中的每个键/值对都通过获取上一步的值(或初始步骤的起始值)传递到此函数。

于 2014-04-17T05:57:40.773 回答