我想下面的函數:採取以下參數:如何用不可變集合和適當的語句寫適當的Scala?
def filters: Map[String, String]
- (從的Request.QueryString)
def key: String
..如果queryString
包含key
在參數中指定def queryString: Map[String, Seq[String]]
,我想將相應的值添加到filters
。
的工作職能是:
private def getUpdatedFiltersIfQueryStringContains(filters: Map[String, String], queryString: Map[String, Seq[String]], key: String): Map[String, String] = {
var updatedFilters: Map[String, String] = filters
if (queryString.contains(key)) {
updatedFilters = updatedFilters ++ Map(key -> queryString.get(key).get.head)
}
updatedFilters
}
這看起來可怕的,對不對?
由於if
語句在Scala中返回的東西,我期待的東西沿着這些線路更多:
private def getUpdatedFiltersIfQueryStringContains(filters: Map[String, String], queryString: Map[String, Seq[String]], key: String): Map[String, String] = {
if (queryString.contains(key)) {
filters ++ Map(key -> queryString.get(key).get.head)
}
}
但是,這並不編譯,錯誤的是:
類型不匹配;發現:單位要求:地圖[字符串,字符串]
Scala沒有一個if語句 - 它有一個if表達式。正如你已經說過的,它們返回一個值 - 一個聲明是一個不返回任何內容的指令的名稱。 – sschaef