scala - 预先添加到 Scala 迭代器 - 超时?
问题描述
我想为现有的迭代器添加一个新的迭代器。
如何将新的迭代器添加到现有的迭代器中?
为什么我的代码会导致我的 REPL 挂起?
以下内容无限期地挂在我的 REPL 中:
scala> var i = Seq(1).iterator
var i: Iterator[Int] = <iterator>
scala> i = Seq(2).iterator ++ i
// mutated i
scala> i.next()
val res0: Int = 2
scala> i.next()
. . .
请注意,以下内容有效,但这是附加而不是前置:
var i = Seq(1).iterator
i = i ++ Seq(2).iterator
i.next()
i.next()
这也有效,但实现了我不能做的整个迭代器:
var i = Seq(1).iterator
i = (Seq(2) ++ i.toSeq).iterator
i.next()
i.next()
谢谢!
解决方案
简单地说,它挂起是因为你有一个无限循环。在您认为要合并迭代器的行中,您实际上是在引用新的i
(惰性)而不是i
.
正如 Luis Miguel 指出的那样,你可以通过引入一个新的 var 来克服这个问题
var i = Seq(1).iterator
var j = i
i = Seq(2).iterator ++ j
i.next()
i.next()
所以这应该可以解决问题。希望它有所帮助并且足够清楚。
推荐阅读
- vba - 多次运行 VBA 代码
- angularjs - 有没有办法在ui路由器中传递状态的“数据”属性?
- python - 如何只调用numpy数组的内容?
- c++ - 如何在 C++ 中实现一个 avl 树,每个节点都是另一个 avl 树
- c++ - return 语句中的“表达式不能用作函数”
- javascript - 在 dijit 布局 tabcontainer 的一系列选项卡中更改一个选项卡的标签颜色
- excel - 如何使用 Microsoft Excel 2016 导入 CSV 文件?
- scala - 我可以在我的 sbt 项目中使用 powermock 吗?
- php - 雄辩的一对一关系,在哪个模型中应该是hasOne?
- android - 如何在 android studio 中为介绍滑块绘制带边框的点?