加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – filterKeys会导致堆栈溢出吗?

发布时间:2020-12-16 18:50:46 所属栏目:安全 来源:网络整理
导读:据我所知,MapLike的方法filterKeys在原始地图上创建了一个包装器.所以,如果我执行下面的代码,m将是一个10K包装器链和原始地图. var m = Map(1 - "one",2 - "two")for(1 - 0 until 10000) {m = m.filterKeys(_%2 == 0)} 现在我认为调用m.contains会导致堆栈溢
据我所知,MapLike的方法filterKeys在原始地图上创建了一个包装器.所以,如果我执行下面的代码,m将是一个10K包装器链和原始地图.

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

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

解决方法

如果我逐字复制,你的循环只执行一次.因此你只创建一个包装器,所以打算成为10000个包装器的链只是一个1的链.它可能是一个错字,但循环,

for(1 <- 0 until 10000) {m = m.filterKeys(_%2 == 0)}

应该是

for(i <- 0 until 10000) {m = m.filterKeys(_%2 == 0)}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读