Scala如何将Map转换为元组的varargs?

3
在Scala Play 2.2.x测试的上下文中,我有一个Map[String, String]需要传递给一个接受(String, String)*(String, String)元组可变参数的函数。
例如:
val data : Map[String, String] = Map("value" -> "25", "id" -> "", "columnName" -> "trades")
route(FakeRequest(POST, "/whatever/do").withFormUrlEncodedBody(data))

但是这会导致类型不匹配,因为withFormUrlEncodedBody仅接受(String, String)*类型。
2个回答

7

简单地说:

def foo(names: (String, String)*) = names.foreach(println)
val folks = Map("john" -> "smith", "queen" -> "mary")
foo(folks.toSeq:_*)
// (john,smith)
// (queen,mary)

_*是编译器的提示


啊,Scala编译器失败了!为什么Map上不能有toVarargsSeq方法呢? - Alan

3

哦,找到了答案,例如。

route(FakeRequest(POST, "/wharever/do").withFormUrlEncodedBody(data.toList: _*))

或者

route(FakeRequest(POST, "/wharever/do").withFormUrlEncodedBody(data.toSeq: _*))

或者

route(FakeRequest(POST, "/wharever/do").withFormUrlEncodedBody(data.toArray: _*))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接