filterKeys会导致堆栈溢出吗?

Mic*_*ael 6 stack-overflow collections scala

据我所知,方法在原始地图filterKeysMapLike创建一个包装器.所以,如果我执行下面的代码m将是一个10K包装链和原始地图链.

var m = Map(1 -> "one", 2 -> "two")
for(1 <- 0 until 10000) {m = m.filterKeys(_%2 == 0)}

现在我认为调用会m.contains导致堆栈溢出,但它不会发生.你能解释一下这个案子的情况吗?

Dyl*_*lan 1

如果我逐字复制,你的循环只执行1次。因此,您只创建了一个包装器,因此本来应该是 10000 个包装器的链实际上只是 1 的链。这可能是一个拼写错误,但是循环,

for(1 <- 0 until 10000) {m = m.filterKeys(_%2 == 0)}
Run Code Online (Sandbox Code Playgroud)

可能应该是

for(i <- 0 until 10000) {m = m.filterKeys(_%2 == 0)}
Run Code Online (Sandbox Code Playgroud)

除此之外,丹尼尔是对的;fitlerKeys 确实产生了本质上是包装器的东西。我花了超过 10k 次迭代,但我确实成功创建了一个 StackOverflowError。