【发布时间】:2017-05-11 17:38:54
【问题描述】:
我正在观察,一种我不完全理解的行为:
scala> val a = Iterator(1,2,3,4,5)
a: Iterator[Int] = non-empty iterator
scala> val b = a.dropWhile(_ < 3)
b: Iterator[Int] = non-empty iterator
scala> b.next
res9: Int = 3
scala> b.next
res10: Int = 4
scala> a.next
res11: Int = 5
它看起来像:迭代器a 的迭代器部分(1,2,3) 被消耗,而(4,5) 被留下。由于必须评估3,因此必须使用它,但根据dropWhile 的定义,必须包含在b 中。迭代器b 是3, (4,5),其中(4,5) 是a 的剩余部分,完全相同的迭代器。我的理解正确吗?
鉴于上述情况,它看起来很危险,b 的行为会通过对a 应用操作而改变。基本上我们有两个对象指向同一个位置。使用dropWhile 是不是像这种糟糕的风格?
【问题讨论】: