簡體   English   中英

map.updated(k,v)和map +(k,v)之間*有任何區別嗎? 我在一個而不是另一個上遇到編譯錯誤

[英]Is there *any* difference between map.updated(k,v) and map + (k,v)? I'm getting a compile error on one but not the other

我是Scala的新手(大約一個月)。 我剛遇到類型檢查錯誤,我無法弄清楚

此代碼片段按預期方式工作。

  def combine(m: Map[Char, Int], tup: (Char, Int)): Map[Char,Int] = tup match {
    case (key: Char, value: Int) => m updated (key, m.getOrElse(key, 0) + value)
  }

該代碼段給出了value的類型不匹配錯誤

  def combine(m: Map[Char, Int], tup: (Char, Int)): Map[Char,Int] = tup match {
    case (key: Char, value: Int) => m + (key -> m.getOrElse(key, 0) + value)
  }

 found   : Int
 required: String
           case (key: Char, value: Int) => m + (key -> m.getOrElse(key, 0) + value)
                                                                             ^

現在, 地圖上文檔說, ms updated (k,v)等同於ms + (k->v)但事實並非如此。

這是我的設置:

SBT version 0.13.8
Scala version 2.11.8
Java SDK 1.8
IntlliJ IDEa

key -> m.getOrElse(key, 0) + value表示(key->m.getOrElse(key, 0)) + value 因此,有效地,您正在嘗試將Int添加到元組,這並不奇怪,這是行不通的。

嘗試使用括號: m + (key -> (m.getOrElse(key, 0) + value))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM