问题标签 [iterate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
909 浏览

haskell - Iteratees和FRP之间有什么联系?

在我看来,这两个想法之间有很强的联系。我的猜测是,如果有一种方法可以用 Iteratees 表达任意图,那么 FRP 可以用 Iteratees 来实现。但是 afaik 他们只支持链状结构。

有人可以对此有所了解吗?

0 投票
1 回答
778 浏览

scala - Scala迭代写入文件

我有一个方法save可以Iteratee it将一些数据保存到it. 在该方法内部,数据可用作生成字节数组块的枚举器。

需要:调用save以使其将数据写入FileOutputStream.

我尝试了以下方法,但不确定这是否可行:

问题:这是它应该做的方式吗?我担心这不会总是关闭流(例外情况)。

我正在使用Play Framework 2.1 中的 Play Framework Iteratee 库(它使用 Scala 期货)。

0 投票
1 回答
1411 浏览

scala - Play 2 Scala 使用几个枚举器(PatchPannel?)提供一个 Websocket 输出 Iteratee

我想逐步为 WebSocket 输出 Iteratee 提供几个枚举器(例如,当我通过 Websocket 输入 iteratee 接收到特定事件时,我想向输出 Iteratee 添加一个特定的枚举器)。

如果我是对的,如果我只是(in,out)在 Websocket 函数参数的末尾返回,这是不可能的,因为 out 已经是一个不可变的枚举器:

我认为 Concurrent.PatchPannel 是我正在寻找的,但我无法理解如何使用它。有没有人有使用 Concurrent.PatchPannel 的例子?(如果这确实是我正在寻找的)。

谢谢

0 投票
1 回答
1103 浏览

scala - Scala Play 中如何管理状态!2.0 网络套接字?

我正在查看https://github.com/playframework/Play20/tree/master/samples/scala/websocket-chat上的示例

要制作 websocket 控制器,您可以编写如下内容:

Chatroom.join 返回一个scala.concurrent.Future[(Iteratee[JsValue,_],Enumerator[JsValue])]。但是 Play 中使用的迭代器和枚举器在哪里!框架?WebSocket类(WebSocket.scala)似乎忽略了输入:

怎么玩!在 iteratee 消耗输入时管理不断变化的状态?

0 投票
1 回答
839 浏览

functional-programming - 使用 Play 2 Iteratees 时如何从 List[T] 中获取 Enumerator[T]

我对 Play 2 很陌生,正在尝试 Iteratees。

Q1。我怎样才能得到一个Enumerator[Person]from List[Person]

Q2。当我尝试将一个传递Enumerator(Option[String])Ok.stream我时,我在控制台上收到一个错误,指出

无法将 Option[String] 的实例写入 HTTP 响应。尝试定义一个 Writeable[Option[String]]

有人可以指出我如何为自定义类型定义可写到 HTTP 响应的正确方向吗?

谢谢。

0 投票
1 回答
979 浏览

scala - Scala 有哪些开发良好的迭代/管道库?

Scala 是否有任何以 Haskell 管道的精神开发的库,或者至少是 iteratee

我首先找到了 Play 的 iteratee 库,但我无法让它工作,而且它似乎与 Play 的并发原语紧密耦合Promise,这在许多情况下可能不合适。

Scalaz 有一些迭代支持(如IterV),但似乎只有核心类没有额外的支持函数、预定义的迭代/枚举器等。我也找不到任何文档,即使 scaladoc 非常稀疏,所以很难正确使用。

而且我找不到任何类似于管道的东西。

0 投票
1 回答
897 浏览

java - Scala和Java中的枚举器与迭代器

枚举器和迭代器有什么区别?根据我的理解,这在 JavaEnumerator中并不是一个花哨的别名。enum相反,它似乎是一种类似于Iterator. 那么有人能够比较和对比EnumeratorIteratorPlay另外,我在as中看到了一个用法

编辑:

我倾向于认为这Enumerator为我们提供了实际的数据块,而Iterator为我们提供了指向已经分块的数据的指针,例如列表。但我不相信情况确实如此。

0 投票
1 回答
110 浏览

json - 需要帮助,访问更多级别的 json/twitter 搜索

我正在使用来自@diegolparra 的示例来进行推特搜索和/或流式传输。

此示例从 twitter 搜索字段的结果中获取 from_user_name 和 text。现在我需要访问 created_at 日期和另一个级别(节点用户)以从用户获取:profile_image_url 和 lang。

请问,有什么帮助吗?

谢谢。

0 投票
1 回答
593 浏览

scala - 如何在不溢出堆栈的情况下将 IO 与 Scalaz7 Iteratees 一起使用?

考虑这段代码(取自此处并修改为使用字节而不是字符行)。

在一个大小合适的文件 (8kb) 上运行此代码会产生 StackOverflowException。一些搜索发现可以通过使用 Trampoline monad 而不是 IO 来避免异常,但这似乎不是一个很好的解决方案 - 牺牲功能纯度来让程序完全完成。解决这个问题的明显方法是使用 IO 或 Trampoline 作为 Monad Transformer 来包装另一个,但我找不到它们中任何一个的 Transformer 版本的实现,而且我还不足以成为一个函数式编程大师知道如何编写我自己的(了解更多关于 FP 是这个项目的目的之一,但我怀疑创建新的 monad 转换器目前有点超出我的水平)。我想我可以围绕创建、运行和返回我的迭代的结果来包装一个大的 IO 操作,

大概有些 monad 不能转换为 monad 转换器,所以我想知道是否可以在不丢弃 IO 或溢出堆栈的情况下处理大文件,如果可以,如何?

额外的问题:我想不出任何方法让迭代者在处理时发出信号,表示它在处理时遇到了错误,除了让它返回 Either,这使得组合它们变得不那么容易。上面的代码展示了如何使用 EitherT 来处理枚举器中的错误,但是这对迭代器是如何工作的呢?

0 投票
3 回答
712 浏览

scala - Scalaz 7 Iteratee 处理大型 zip 文件 (OutOfMemoryError)

我正在尝试使用 scalaz iteratee 包来处理恒定空间中的大型 zip 文件。我需要对 zip 文件中的每个文件执行一个长时间运行的过程。这些过程可以(并且应该)并行运行。

我创建了一个EnumeratorT将每个膨胀ZipEntry成一个File对象。签名看起来像:

我想附加一个IterateeT将对每个文件执行长时间运行的过程。我基本上得到了类似的东西:

当我尝试运行它时:

我收到一条java.lang.OutOfMemoryError: Java heap space消息。这对我来说很有意义,因为它试图建立一个庞大的列表来存储所有这些IOPromise对象。

几个问题:

  • 有人对如何避免这种情况有任何想法吗?感觉就像我错误地解决了这个问题,因为我真的只关心longRunningProcess它的副作用。
  • 这里的Enumerator方法是错误的方法吗?

我几乎没有想法,所以任何事情都会有所帮助。

谢谢!

更新#1

这是堆栈跟踪:

我目前正在接受 nadavwr 的建议,以确保一切都像我想的那样。我会报告任何更新。

更新#2

使用以下两个答案的想法,我找到了一个不错的解决方案。正如 huynhjl 建议的那样(我使用 nadavwr 的分析堆转储的建议进行了验证),consume导致每个膨胀ZipEntry都保存在内存中,这就是进程内存不足的原因。我更改consumefoldM更新了长时间运行的过程,只返回 aPromise[IOE[Unit]]而不是对文件的引用。这样我最后就有了所有 IoExceptions 的集合。这是工作解决方案:

此解决方案会在异步上传每个条目时对它们进行膨胀。Promise最后,我有一个包含任何错误的已完成对象的巨大列表。我仍然不完全相信这是对 Iteratee 的正确使用,但我现在确实有几个可重用、可组合的部分,可以在我们系统的其他部分中使用(这对我们来说是一种非常常见的模式)。

感谢你的帮助!