3

我希望能够创建一个可以无限重复一系列元素的枚举器,但我无法找到一种方法。当我创建一个递归枚举器时,当我尝试引用它时似乎溢出了堆栈。例如,为了创建一个重复 A、B、C、D、A、B、C、D、A、B、C、D、A 的枚举器...我希望使用类似的东西:

scala> lazy val e1: Enumerator[String] = Enumerator("a","b","c","d") andThen e1
e1: play.api.libs.iteratee.Enumerator[String] = <lazy>

但是然后尝试以任何方式使用它,我得到堆栈溢出:

scala> e1 through Enumeratee.take(1) apply Iteratee.foreach(println(_)
java.lang.StackOverflowError
    at .e1$lzycompute(<console>:11)
    at .e1(<console>:11)
    at .e1$lzycompute(<console>:11)
    at .e1(<console>:11)
    at .e1$lzycompute(<console>:11)
    at .e1(<console>:11)
4

1 回答 1

3

啊哈!回答我自己的问题

感谢@travis 和@cmbaxter 为我指明了正确的方向。我正在查看旧的源代码和旧的 api 文档,并没有看到像重复这样的新方法。我的票是展开:

scala> val s: Stream[String] = "A" #:: "B" #:: "C" #:: "D" #:: s
s: Stream[String] = Stream(A, ?)

scala> Enumerator.unfold(s)(s => Some(s.tail, s.head)) through Enumeratee.take(10) apply Iteratee.foreach(println(_))
res3: scala.concurrent.Future[play.api.libs.iteratee.Iteratee[String,Unit]] = scala.concurrent.impl.Promise$DefaultPromise@55d3e052

scala> A
B
C
D
A
B
C
D
A
B
于 2014-04-25T19:01:59.437 回答