2017-07-19 32 views
1

爲什麼當我重新訪問MapValues的結果時,它會改變嗎?不應該是不可改變的。爲什麼Map.mapValues更改答案

考慮以下菊石會議。

[email protected] import scala.util.Random 
import scala.util.Random 
[email protected] Seq("a").map(_ => Random.nextInt) 
res1: Seq[Int] = List(1035918980) 
[email protected] res1 
res2: Seq[Int] = List(1035918980) 
// re accessing Seq.map doesnt change 
[email protected] Map("a" -> "a").mapValues(_ => Random.nextInt()) 
res3: Map[String, Int] = Map("a" -> 653125272) 
[email protected] res3 
res4: Map[String, Int] = Map("a" -> -694232910) 
// re accessing Map.mapValues changes 

回答

1

根據the ScaladocmapValues返回包裝原始集合,而不是複製(轉化的)數據的圖。由於這只是一個視圖,而不是一個單獨的集合,因此每次訪問時都需要重新評估。

這與map不同,其中the scaladoc提到返回一個新的集合,而不僅僅是一個引用原始視圖的視圖。

1

mapValues返回地圖的視圖。每次訪問時都會應用值轉換,而不是存儲在內存中。

相關問題