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)?
在这种情况下,要折在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采用上一步的值(或初始步骤的起始值)。