【发布时间】:2019-07-18 12:24:30
【问题描述】:
我想以函数的方式实现迭代器特征,即不使用 var。该怎么做?
假设我有一个外部库,我通过调用函数 getNextElements(numOfElements: Int):Array[String] 来获取一些元素,并且我想使用该函数实现一个迭代器,但不使用指示“当前”数组的变量(在我的情况下,var 缓冲区)。我怎样才能以功能的方式实现它?
class MyIterator[T](fillBuffer: Int => Array[T]) extends Iterator[T] {
var buffer: List[T] = fillBuffer(10).toList
override def hasNext(): Boolean = {
if (buffer.isEmpty) buffer = fillBuffer(10).toList
buffer.nonEmpty
}
override def next(): T = {
if (!hasNext()) throw new NoSuchElementException()
val elem: T = buffer.head
buffer = buffer.tail
elem
}
}
class Main extends App {
def getNextElements(num: Int): Array[String] = ???
val iterator = new MyIterator[String](getNextElements)
iterator.foreach(println)
}
【问题讨论】:
标签: scala functional-programming iterator