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

gho*_*dss 1 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)
}
Run Code Online (Sandbox Code Playgroud)

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

Rya*_*yan 5

在这种情况下,要params地图上,将函数应用于每个键/值对也需要调用先前的键/值对函数的结果。

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

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