问题标签 [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 投票
1 回答
460 浏览

scala - Scala:应用 enumeratee 后获取原始 iteratee(播放文档中的示例无法编译)

我想将 enumeratee 应用于 iteratee,然后取回原始的 iteratee,这样我就可以应用更多的东西。播放文档中有一个示例,它使用 Iteratee[Int,Int] 来总结其输入(http://www.playframework.org/documentation/2.0.1/Enumeratees)。然后他们使用 Enumeratee[String,Int] 允许像“3”和“6”这样的字符串作为输入。示例如下:

但这不会编译,因为 Enumerator.>>> 将另一个 Enumerator 作为参数 - 而不是 iteratee。我尝试使用 |>> 代替:

但是这个例子打印的不是“28”而是“10”。它似乎只考虑添加到适应迭代的部分。

使用枚举对象时如何取回原始迭代对象?

0 投票
2 回答
650 浏览

scala - Scala/Play:编写将值添加到流中的 Enumeratee

我想写一个 enumeratee,它只将一个 Input.El 推入 iteratee,然后返回剩余的 iteratee。我称它为 prepend,因为它只是通过为其添加一个值来更改流。这是我的尝试:

当我现在通过

它只打印应该添加的 0 。枚举器中的其他值将被忽略。如果我还覆盖了枚举对象的 &> 方法(转换方法),我可以让它工作:

但这不是一个非常干净的方法,因为 applyOn 方法仍然无效。我想我弄错了 applyOn 方法的含义。在我看来,它应该返回一个返回原始迭代的迭代,然后在原始迭代上继续输入。

上面的转换方法应该解释我想从我的被枚举者那里得到什么行为。如何通过覆盖 applyOn 而不是转换来实现此行为?

0 投票
2 回答
229 浏览

haskell - 了解 Haskell 中的迭代函数

我试图弄清楚 Haskell 中的迭代 I/O 是什么。我用一些定义检查了以下 Haskell-Wiki 。

我不明白该函数的第二行、第三行和最后两行的含义:

我知道, iteratee 函数做了什么,但我不明白一些行。这个维基页面上的其他功能真的很神秘。我不明白他们在做什么,因为我错过了一些解释。

0 投票
2 回答
1532 浏览

scala - 为什么调用错误或在 BodyParser 的 Iteratee 中完成请求会在 Play Framework 2.0 中挂起?

我正在尝试理解 Play 2.0 框架的反应式 I/O 概念。为了从一开始就获得更好的理解,我决定跳过框架的帮助程序来构建不同类型的迭代器,并Iteratee从头开始编写一个自定义以供 aBodyParser用于解析请求正文。

从IterateesScalaBodyParser文档中提供的信息以及关于播放反应式 I/O 的两个演示文稿开始,这就是我想出的:

(备注:所有这些东西对我来说都是新的,所以如果这完全是废话,请原谅。) Iteratee 非常愚蠢,它只是读取所有块,总结接收到的字节数并打印出一些消息。当我用一些数据调用控制器操作时,一切都按预期工作 - 我可以观察到 Iteratee 接收到所有块,当读取所有数据时,它切换到状态完成并且请求结束。

现在我开始使用代码,因为我想看看这两种情况的行为:

  • 在读取所有输入之前切换到状态错误。
  • 在读取所有输入之前切换到完成状态并返回 aResult而不是Int.

我对上述文档的理解是两者都应该是可能的,但实际上我无法理解观察到的行为。为了测试第一种情况,我将上述代码的第 17 行更改为:

所以我只是添加了一个条件,如果收到超过 10000 个字节,则切换到错误状态。我得到的输出是这样的:

然后请求永远挂起并且永远不会结束。我对上述文档的期望是,当我在Iterateeerror内部调用函数时fold,应该停止处理。这里发生的是 Iteratee 的 fold 方法在被调用后被调用了几次error——好吧,然后请求挂起。

当我在读取所有输入之前切换到完成状态时,行为非常相似。将第 15 行更改为:

和第 17 行到:

产生以下输出:

再次请求永远挂起。

我的主要问题是为什么请求在上述情况下挂起。如果有人能阐明这一点,我将不胜感激!

0 投票
1 回答
178 浏览

haskell - 在 Pipes-2.1.0 包中完成

我正在使用 Pipes-2.1.0 包和 zeromq3-haskell 包来构建一个小消息管道。除了我无法理解 Frames 的最终确定之外,一切似乎都进展顺利。

在接下来的框架中,我获得了两个资源;zeromq 上下文和 zeromq 套接字。然后我不断地等待消息(以 的形式ByteStrings)在 zeromq 套接字上发布。

现在如果我试试这个:

我明白了:

publisher收到后完成,但一个BytesString

为什么会这样?

我对在 Pipes-2.1.0 中使用 Frames 进行最终确定有什么误解?

如果我开始攻击外面的树,它还有机会吗?

0 投票
3 回答
1427 浏览

scala - Play Framework 2.0 BodyParser - 推送解析 XML 流

尽管阅读了官方文档和这些问题中链接的资源,但我觉得问这个问题有点离题了:

如何理解 play2 中的“Iteratee”?

Play 2.0中看不懂Iteratee、Enumerator、Enumeratee

...我对迭代器、枚举器和 Play 2.0 的反应模型仍然很模糊。但无论如何,我想设置一个 Web 服务,允许我上传大型 XML (>100MB) 文件,挑选某些特定的(非交错的)NodeSeq,处理它们,并将结果流式传输回客户端。

我认为我需要做的第一件事是编写一个 BodyParser,它接收大块字节,将它们提供给 XML 解析器,然后<doc>...</doc>以一种懒惰的方式发出我想要的 NodeSeq 流。

任何人都可以提供任何指导和/或示例来说明如何实现这一点吗?

更新:更多背景:-

我的 XML 实际上是一个 Solradd文档,所以它看起来像:

我想以<doc>流的方式处理每一个,所以我的解析器显然必须等到它遇到一个<doc>开始事件,缓冲所有内容直到等效的</doc>结束事件,并发出一个已完成元素的 NodeSeq,然后刷新它的缓冲区。

这将如何与 Play BodyParser 一起工作,我不完全确定。如果我能进一步澄清我想要做什么,则会有更多更新!

尽管整个 XML 文件很大,但每个<doc />元素本身都非常小,尽管我显然必须检查字节缓冲区是否没有超过一定的大小。

0 投票
1 回答
564 浏览

scala - 使用 Play2/Scala 进行定期 WS 调用以提供 Enumerator 的最佳方法?

我使用枚举器模式通过 WS.url 每秒检索一些推文

我的问题是

正在等待一个

由于 WS.url(...).get 返回一个 Promise,并且当我使用 Promise.timeout 每秒重新启动调用时,

我有一个

所以我必须使用 value.get 来获得好的类型,所以对于异步方面来说它看起来不是很干净。

这段代码有效,但我的问题是:有没有更好、更优雅的方法来实现这一目标?我可以轻松地从另一个 Promise 和 Promise.timeout 中获得 Promise 吗?

谢谢 :)

0 投票
4 回答
5681 浏览

scala - Play 2.x:使用 Iteratees 进行响应式文件上传

我将从这个问题开始:如何使用 Scala APIIteratee将文件上传到云存储(在我的情况下是 Azure Blob 存储,但我认为它现在不是最重要的)

背景:

我需要将输入分成大约 1 MB 的块,以便将大型媒体文件(300 MB+)存储为 Azure 的BlockBlobs. 不幸的是,我的 Scala 知识仍然很差(我的项目是基于 Java 的,Scala 的唯一用途是上传控制器)。

我尝试使用此代码:为什么调用错误或在 BodyParser 的 Iteratee 中完成请求在 Play Framework 2.0 中挂起?(as a Input Iteratee) - 它工作得很好,但Element我可以使用的每个大小为 8192 字节,因此对于将数百兆字节的文件发送到云来说太小了。

我必须说这对我来说是一种全新的方法,而且很可能我误解了一些东西(不想说我误解了一切;>)

我将不胜感激任何提示或链接,这将有助于我解决该主题。如果有任何类似用法的样本,那将是我了解这个想法的最佳选择。

0 投票
1 回答
1656 浏览

scala - Play 2 Scala - 使用 Iteratee 上传大 CSV 文件以响应式处理每一行的最佳方式

我想使用 Play2 在 elasticsearch 上上传一个非常大的 CSV 文件(数百万行)。我编写了以下运行良好的代码。

我对跳过第一块中的 http 响应标头的方式不满意。应该有一种方法可以将这个 iteratee 与第一个 Iteratee 链接起来,跳过 http 标头并直接切换到 Done 状态,但我还没有找到方法。

如果有人可以帮忙

0 投票
1 回答
492 浏览

scala - 用一个枚举器喂两个迭代器

我是玩框架、函数式编程和 Iteratee I/O 的新手,所以也许我的问题非常离题甚至愚蠢。

我想将大文本文件作为流上传到第三方,同时提取有关该文件的元数据(基于其内容,为了简化说它是一个 csv 文件)。

我已经编写了两个工作体解析器:Iteratee[Array[Byte], B]一个包含编写逻辑,一个Iteratee[Array[Byte], MetaData]包含元数据提取逻辑。您能否告诉我如何结合这两个解析器来同时处理写入和提取内容