gpt4 book ai didi

string - 字符串迭代器的意外行为

转载 作者:行者123 更新时间:2023-12-02 09:08:14 25 4
gpt4 key购买 nike

谁能解释为什么这些迭代器的行为不同?我通常期望字符串的行为类似于 IndexedSeq[Char]。这是否记录在任何地方?

val si: Iterator[Char] = "uvwxyz".iterator
val vi: Iterator[Char] = "uvwxyz".toIndexedSeq.iterator

val sr = for (i <- 1 to 3)
yield si take 2 mkString
//sr: scala.collection.immutable.IndexedSeq[String] = Vector(uv, uv, uv)

val vr = for (i <- 1 to 3)
yield vi take 2 mkString
//vr: scala.collection.immutable.IndexedSeq[String] = Vector(uv, wx, yz)

最佳答案

在调用迭代器的 take 后,无法保证迭代器的状态。

迭代器的问题在于,许多有用的操作只能通过产生副作用来实现。所有这些操作都有指定的直接效果,但也可能有无法指定的副作用(或会使实现复杂化)。

take 而言,有一些实现可以克隆迭代器的内部状态,还有一些实现可以推进迭代器。如果您想保证没有副作用,则必须使用不可变的数据结构,在任何其他情况下,您的代码应该仅依赖于直接效果。

关于string - 字符串迭代器的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8303688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com