我可以用长参数做一个懒惰的 take 吗?
Can I do a lazy take with a long parameter?
Stream.take 接受一个整数作为参数。我想定义一个需要很长时间的拍摄 - 如果不使用 takeWhile 来管理计数器,这可能吗?
为了让您知道它至少是可行的(但这是个好主意吗?),您可以使用 take
的替代版本丰富 Stream
:
implicit class StreamOps[A](val stream: Stream[A]) extends AnyVal {
def take(n: Long): Stream[A] = {
if (n <= 0 || stream.isEmpty) Stream.empty
else if (n == 1) Stream.cons(stream.head, Stream.empty)
else Stream.cons(stream.head, stream.tail take n-1)
}
}
Stream.take 接受一个整数作为参数。我想定义一个需要很长时间的拍摄 - 如果不使用 takeWhile 来管理计数器,这可能吗?
为了让您知道它至少是可行的(但这是个好主意吗?),您可以使用 take
的替代版本丰富 Stream
:
implicit class StreamOps[A](val stream: Stream[A]) extends AnyVal {
def take(n: Long): Stream[A] = {
if (n <= 0 || stream.isEmpty) Stream.empty
else if (n == 1) Stream.cons(stream.head, Stream.empty)
else Stream.cons(stream.head, stream.tail take n-1)
}
}