2016-07-13 4 views
0

私はScalaの新機能です(約1ヶ月)。私はちょうど私が把握することができないタイプチェックエラーに遭遇しましたmap.updated(k、v)とmap +(k、v)の間に* *の違いがありますか? 1つではなく他のコンパイルエラーが発生しました

このスニペットは期待どおりに動作します。

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) 
                      ^

の型の不一致エラーを与える、docs on mapms updated (k,v)ms + (k->v)と同等であると言うが、それはそうではないように思われます。

SBT version 0.13.8 
Scala version 2.11.8 
Java SDK 1.8 
IntlliJ IDEa 

答えて

2

key -> m.getOrElse(key, 0) + value手段、(key->m.getOrElse(key, 0)) + value

は、ここに私のセットアップです。したがって、効果的には、Intをタプルに追加しようとしていますが、それはうまくいかないため動作しません。

括弧を使用して試してください。m + (key -> (m.getOrElse(key, 0) + value))

関連する問題