从Scala中的Map.get处理选项

Sou*_*nta 3 monads scala option

我有一个Scala Map,它包含我在HTTP请求中获得的一堆参数.

val queryParams = Map( ("keyword" -> "k"), ("from" -> "f"), ("to" -> "t"), ("limit" -> "l") ) 
Run Code Online (Sandbox Code Playgroud)

我有一个采用所有这些参数的方法.

def someMethod( keyword: String, from: String, to: String, limit: String) = { //do something with input params }
Run Code Online (Sandbox Code Playgroud)

我想将地图中的参数传递给我的方法someMethod.

queryParams.get返回一个Option.所以我可以queryParams.get("keyword").getOrElse("")为每个输入参数调用类似的东西.

someMethod( queryParams.get("keyword").getOrElse(""), queryParams.get("from").getOrElse(""), queryParams.get("to").getOrElse(""), queryParams.get("limit").getOrElse(""))
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法 ?

rot*_*erl 7

如果所有参数都具有相同的默认值,则可以为整个Map 设置默认值:

val queryParams = Map( ("keyword" -> "k"), ("from" -> "f"), ("to" -> "t"), ("limit" -> "l") ).withDefaultValue("")
someMethod( queryParams("keyword"), queryParams("from"), queryParams("to"), queryParams("limit"))
Run Code Online (Sandbox Code Playgroud)

withDefaultValue返回一个Map,对于任何不存在的值,返回默认值.现在你确定你总是得到一个你可以使用的值queryParams("keyword")(没有get函数).