说我有下面的函数定义:撰写迭代
def print(input:Iterator[String]) : Iterator[String] = {
Iterator.continually {
val item = input.next
item + item
}
}
给出的输入
List("1", "2", "3").iterator
我想要的输出等于
List("11", "22", "33").iterator
的问题是,当我使用Iterator.continually
,我不得不使用takeWhile
遍历列表。我希望能够使用存在的任何Iterator函数(折叠,过滤器等),而不会在“空迭代器”异常处得到“下一个”。
您可以在F#中使用seq和yield来做到这一点。我希望Iterator.continually
会一样健壮。
F#例如:
seq {
for i in input |> yield i + i
}
附:我意识到我可以编写一堆函数,然后将它们传递给Iterator函数,但我试图以我在F#中可以使用的方式编写迭代器。
您是否已经知道[Streams](http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Stream)? – DaoWen
这个问题对我来说根本不清楚。你可以在'input'上调用'map'来完成该操作('input.map(x => x + x)'),但是这似乎并不能解决你的用例,只是你的例子。但是,我不知道你的用例是什么。 –
我不了解溪流,他们对这类问题更好吗? –