Что я должен сделать, чтобы быть в состоянии возвратить Iterator из метода/класса? Как можно было бы добавить что черта к классу?
Вы можете расширить Iterator, для чего потребуется реализовать методы next
и hasNext
:
class MyAnswer extends Iterator[Int] {
def hasNext = true
def next = 42
}
Но вы получите больше гибкости, если вы расширите Iterable, для чего потребуется реализовать элементы elements
(или iterator
во 2. 8):
class MyAnswer extends Iterable[Int] {
def iterator = new Iterator[Int] {
def hasNext = true
def next = 42
}
}
Обычная идиома, похоже, заключается в том, чтобы выставить итератор в какую-то частную коллекцию, например:
class MyStooges extends Iterable[String] {
private val stooges = List("Moe", "Larry", "Curly")
def iterator = stooges.iterator
}
def odd(from: Int, to: Int): List[Int] =
for (i <- List.range(from, to) if i % 2 == 1) yield i