Scala:向Iterator"从内部提供价值"

时间:2017-02-16 15:31:53

标签: scala iterator

我想在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循环,而是来自一些任意的代码。

1 个答案:

答案 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
  }
}