我想在Scala中做这样的事情。
def getFancyIterator: Iterator[Int] = {
... { /// Some arbitrary logic goes here: conditionals, loops, whatever
... {
... {
val x = ...
// Then at some point I call this:
feedNext(x)
}
}
}
}
现在,从外面看,它应该看起来像普通的迭代器,所以我可以做,例如:
getFancyIterator.foreach(println)
当然,技巧是,我不想在任何时间点将所有这些值存储在集合中。换句话说,我希望我的getFancyIterator
功能能够#34; Feed"迭代器的next()
值"按需"。
我确定必须有一些(令人尴尬的)简单方法才能做到这一点,但不知怎的,它并没有出现在我的脑海里......
更新
从本质上讲,我想做yield x
,但不仅仅是来自普通的for
循环,而是来自一些任意的代码。
答案 0 :(得分:0)
直接实施Iterator界面,并使用next()
返回feedNext(x)
值:
def getFancyIterator: Iterator[Int] = new Iterator[Int] {
def hasNext = true //or some other flag to determine when you are done.
def next():Int = {
//some fancy logic goes here to calculate x
1
}
}