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

在Scala中使用映射链接多个方法调用,scala,scala-dispatch,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(请求) } 这不起作用,因为addParameter不修改req-而是生成一个添加了参数的新req对象(在本例中,该参数将被丢弃)。写这篇

我使用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(请求)
}
这不起作用,因为addParameter不修改req-而是生成一个添加了参数的新req对象(在本例中,该参数将被丢弃)。写这篇文章的最优雅的方式是什么,这样我就可以循环使用params,用map的每个键/值对调用addParameter,建立req,直到我将其传递到Http(req)?

在这种情况下,您需要折叠
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
获取上一步的值(或初始步骤的起始值)传递到此函数中。

在这种情况下,您需要折叠
参数映射,将函数应用于每个键/值对,该键/值对还获取在前一个键/值对上调用该函数的结果

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
获取上一步的值(或初始步骤的起始值)。

!对于那些将来找到这篇文章的人来说,Dispatch也有一个setParameters(parameters:Map[String,Seq[String]])方法。太棒了!对于将来找到这篇文章的人来说,Dispatch也有一个setParameters(参数:Map[String,Seq[String]])方法。