你如何在Scala中返回迭代器?

Geo*_*Geo 21 iterator scala traits

为了能够从方法/类中返回迭代器,我该怎么办?如何将这个特性添加到课程中?

Mit*_*ins 33

您可以扩展Iterator,这将要求您实现nexthasNext方法:

  class MyAnswer extends Iterator[Int] {
    def hasNext = true
    def next = 42
  }
Run Code Online (Sandbox Code Playgroud)

但是,如果扩展Iterable,您将获得更大的灵活性,这需要您实现elements(或iterator在2.8中):

  class MyAnswer extends Iterable[Int] {
    def iterator = new Iterator[Int] {
      def hasNext = true
      def next = 42
    }
  }
Run Code Online (Sandbox Code Playgroud)

一个常见的习惯用法似乎是将迭代器暴露给一些私有集合,如下所示:

  class MyStooges extends Iterable[String] {
    private val stooges = List("Moe", "Larry", "Curly")
    def iterator = stooges.iterator
  }
Run Code Online (Sandbox Code Playgroud)


Jor*_*dão 10

对于一种方法,只需产量:

def odd(from: Int, to: Int): List[Int] = 
  for (i <- List.range(from, to) if i % 2 == 1) yield i
Run Code Online (Sandbox Code Playgroud)

  • 正确,但......代码示例实际上并没有回答这个问题.只需将"List"的两个实例替换为"Iterator",它就能完美运行! (5认同)