【问题标题】:Scala: List.iterator produces empty iteratorScala:List.iterator 产生空迭代器
【发布时间】:2016-07-01 01:32:07
【问题描述】:

使用内置方法将列表转换为迭代器时会出现问题。

  1. 调用iterator.hasNext会改变iterator.size的值。
  2. iterator.hasNext == false 即使在非空迭代器上任何迭代发生之前。

关于什么可能导致这些问题的任何想法?

val list = scala.collection.immutable.List(1, 2, 3)
val iterator = list.iterator
println(iterator.size) // 3
println(iterator.hasNext) // false
println(iterator.size) // 0

在 Scala 版本 2.11.4(OpenJDK 64 位服务器 VM,Java 1.8.0_72)上本地确认。

已在 IdeOne here 确认。

【问题讨论】:

  • 来自 Iterator docs API:“特别重要的是要注意,除非另有说明,否则在调用迭代器方法后绝不应使用迭代器。”。这包括size 方法。

标签: scala


【解决方案1】:

计算迭代器的大小会消耗它,因为大小没有被存储。我认为它按预期工作,即使 API(即为迭代器提供大小)具有误导性。

【讨论】:

  • “吞噬”是什么意思?
  • 很好,想表达一个“邪恶”版本的误导。认为这些术语表达了我的意思,但事实并非如此。
  • 我赞成“吞噬”这个词的选择,当我自己发现这个怪癖时,我有点生气(实际上只是今天)。
猜你喜欢
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 2016-11-10
  • 2014-09-17
相关资源
最近更新 更多