gpt4 book ai didi

Scala - 迭代器和 takeWhile

转载 作者:行者123 更新时间:2023-12-04 00:43:36 25 4
gpt4 key购买 nike

我正在运行以下代码:

 val it = List(1,1,1,2,2,3,3).iterator.buffered
val compare = it.head
it.takeWhile(_ == compare).toList

它返回 (1,1,1)。但是,如果我将其运行为:
val it = List(1,1,1,2,2,3,3).iterator.buffered
it.takeWhile(_ == it.head).toList

我得到(1,1)。为什么会这样?不是 head调用后评估 takeWhile结果应该是一样的?

最佳答案

因为迭代器是可变的,it.head 的值取决于何时评估。

检查 implementation of takeWhile 表明它在应用谓词之前删除了迭代器的头部。

因此,在第三次迭代中,it.head从谓词内部评估将是 2 ,因为第三个元素已经被移除。

这说明了为什么您应该更喜欢不变性。它排除了像这样的一整类不明显的行为。

关于Scala - 迭代器和 takeWhile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16356897/

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