gpt4 book ai didi

scala - 如何使用 play iteratees 创建无限枚举器

转载 作者:行者123 更新时间:2023-12-02 20:59:47 24 4
gpt4 key购买 nike

我希望能够创建一个可以无限重复一系列元素的枚举器,但我无法找到一种方法。当我创建递归枚举器时,当我尝试引用它时,似乎会溢出堆栈。例如,为了创建一个重复 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)

最佳答案

啊哈!回答我自己的问题

感谢@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

关于scala - 如何使用 play iteratees 创建无限枚举器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23300364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com