说我有以下功能定义:
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函数(折叠,过滤等等),而不会获得“下一个空迭代器”异常。
您可以使用seq和yield在F#中执行此操作。我希望Iterator.continually
同样强大。
F#示例:
seq {
for i in input |> yield i + i
}
P.S。我意识到我可以编写一堆函数,然后将它们传递给Iterator函数,但我试图用F#中的方式编写迭代器。
答案 0 :(得分:3)
我认为List.map
会做你想要的。但是,您可能希望将Scala用于理解语法,编译器只将其转换为map
调用。这是我的REPL测试中的一个片段。似乎工作。
scala> def print(input:Iterator[String]) : Iterator[String] =
| for (i <- input) yield i + i
print: (input: Iterator[String])Iterator[String]
scala> print( List("a", "b", "c").iterator )
res0: Iterator[String] = non-empty iterator
scala> res0.toList
res1: List[String] = List(aa, bb, cc)