我不確定什麼createMap()
函數返回,但我的猜測是它返回一個Map[String, Int]
。
如果這是真的,那麼您的代碼將失敗,因爲Map[String, Int]
是不可變的,並且您不能使用此代碼newMap(k) = 2 * v
將值重新分配給不可變映射。您必須在此使用mutable.Map[String, Int]
。
示例代碼(在斯卡拉REPL):
scala> val x = Map("foo" -> 1, "bar" -> 2)
x: scala.collection.immutable.Map[String,Int] = Map(foo -> 1, bar -> 2)
scala> var y: scala.collection.mutable.Map[String, Int] = scala.collection.mutable.Map(x.toSeq: _*)
y: scala.collection.mutable.Map[String,Int] = Map(foo -> 1, bar -> 2)
scala> y("foo") = 3
scala> y
res2: scala.collection.mutable.Map[String,Int] = Map(foo -> 3, bar -> 2)
但是,你所需要的就是隻是一個新的地圖加倍所有的值,你可以簡單地做:
x.map { case (k, v) => k -> 2 * v }
可以嗎分享你正在努力實現的目標? –
你說'2 * v'改成'v * 2'會不會失敗?失敗如何?它不再編譯?它是否以不同的結果運行?請澄清。 – jwvh
「它失敗」並不是一個足夠準確的錯誤描述,可以幫助我們。 *什麼*失敗? *它是如何失敗的?你的代碼有什麼問題?你有錯誤信息嗎?什麼是錯誤信息?你得到的結果不是你期待的結果嗎?你期望得到什麼結果?爲什麼?你得到了什麼結果?兩者有什麼不同?你正在觀察的行爲不是所期望的行爲?什麼是期望的行爲,爲什麼,觀察到的行爲是什麼,以及它們以何種方式不同? –