我希望能够创建一个无限重复一系列元素的枚举器,但是我在找出方法时遇到了麻烦。当我创建一个递归的枚举器时,我尝试引用它时似乎溢出了堆栈。例如,为了创建一个重复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)
答案 0 :(得分:3)
AHA!回答我自己的问题
感谢@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