您可以使用collection.Map作爲fold的累加器/返回值嗎?在foldleft中使用collection.Map
例如:
Seq(1, 2, 3).foldLeft(collection.Map.empty[Int, Int]) {
case (map, i) => map.asInstanceOf[collection.Map[Int, Int]] + (i -> i)
}
斯卡拉給了我以下類型的錯誤:
found : scala.collection.Map[Int,Int]
required: scala.collection.immutable.Map[Int,Int]
Seq(1, 2, 3).foldLeft(collection.Map.empty[Int, Int]) { case (map, i) => map.asInstanceOf[collection.Map[Int, Int]] + (i -> i) }
爲什麼強制使用的collection.immutable.Map
代替collection.Map
?
編輯:毫無意義的鑄造是有點誤導,所以我想讓我的意圖更清晰。我特別使用collection.Map
,因爲它是immutable.Map
和mutable.Map
的超類。在現實中,我使用的返回collection.Map
褶皺的內部函數,可以考慮:
scala> def func(map: collection.Map[Int, Int]): collection.Map[Int, Int] = map
func: (map: scala.collection.Map[Int,Int])scala.collection.Map[Int,Int]
scala> Seq(1, 2, 3).foldLeft(collection.Map.empty[Int, Int])((map, i) => map + (i -> i))
res11: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 2 -> 2, 3 -> 3)
scala> Seq(1, 2, 3).foldLeft(collection.Map.empty[Int, Int])((map, i) => func(map) + (i -> i))
<console>:9: error: type mismatch;
found : scala.collection.Map[Int,Int]
required: scala.collection.immutable.Map[Int,Int]
Seq(1, 2, 3).foldLeft(collection.Map.empty[Int, Int])((map, i) => func(map) + (i -> i))
^
下面給出的答案不工作:起始值改變從collection.Map.empty[Int, Int]
到collection.Map[Int, Int]()
。我不知道爲什麼,這使得一個區別:
scala> Seq(1, 2, 3).foldLeft(collection.Map[Int, Int]())((map, i) => func(map) + (i -> i))
res13: scala.collection.Map[Int,Int] = Map(1 -> 1, 2 -> 2, 3 -> 3)
這實際上並不奏效,演員角色對於說明我正在使用collection.Map內的關鍵內容至關重要,因此我會更新問題以使其更加清晰。 – jkoenig
@jkoenig這很奇怪,它對我來說就像這樣完美... –
它作爲書面作品,但它不能與collection.Map這是我真正想要的工作,檢查我的意思是一個例子的編輯。感謝您的回答,我的道歉不會使我的意圖更加明顯。 – jkoenig