问题标签 [scala-streams]

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 回答
426 浏览

scala - 如何在 akka 流中模拟 Sink?

我有一个简单的“保存”功能正在使用akka-stream-alpakka multipartUpload,它看起来像这样:

我想测试这个功能,2种情况:

  1. 那 multipartUpload 成功了,我得到了 AWSLocation (我的案例类)。
  2. multipartUpload 失败,我得到 S3Exception

所以我想监视 multipartUpload 并返回我自己的接收器,如下所示:

问题是我明白了Error:(47, 93) akka.stream.scaladsl.Sink.type does not take parameters,我知道我不能像这样创建水槽,但我该怎么做?或者有什么更好的测试方法?

0 投票
0 回答
265 浏览

scala - Scala Stream.grouped 将整个流缓冲到内存中

调用groupedScalaStream似乎会将整个流缓冲到内存中。我在这里挖了很多东西来确定哪个类持有对 Stream 头部的引用。

一个简单的例子:

如果运行此代码并在foreach函数中放置一个断点,则可以看到在 Stream 的头部被绘制时有一个引用。

经过多次迭代,内存中仍然存在对 Stream 早期“块”的引用: 几次迭代后在内存中流式传输 Cons

此外,如果我们检查对 Stream 头部的引用,我们可以看到 IterableLike 中的一些 lambda 持有一个引用。

在此处输入图像描述

grouped上调用时Stream,Collections 库首先调用,返回 a ,然后在迭代器上调用,返回iteratora 。上面的屏幕截图表明,内部的某些东西似乎抓住了 Stream 的头部,但我无法确定是什么。StreamStreamIteratorgroupedGroupedIteratorGroupedIterator

我的问题是双重的: 1. 这是 Scala Streams 的预期行为吗?如果不是,在 StreamIterator 和 GroupedIterator 的实现中发生了什么导致 Stream 的头部在运行.grouped(N)时被保留Stream

0 投票
2 回答
56 浏览

scala - 递归期间的多态类型错误 - 如何解决?

我是 scala 的新手,我正在关注“Scala 中的 FP”一书。现在我正在为我正在重新创建的 Stream 数据类型编写展开函数。问题是,类型检查器告诉我多态类型似乎不适合递归。

这是 Stream 特征及其静态对象,包括展开函数:

输出是:

多态表达式无法实例化为预期类型;找到:[A(在方法展开中)](f:((A(在方法常量展开中),A(在方法常量展开中)))=>选项[(A(在方法展开中),(A(在方法常量展开中), A(在方法常量Unfold)))])StreamTrait[A(在方法展开)] 需要: StreamTrait[A(在方法常量Unfold)] def constantUnfold[A](a: A): StreamTrait[A] = unlock(a,身份(a));

0 投票
1 回答
51 浏览

scala - 将 Scala 流转换为流的操作符或方法(给定流的后缀)

问题很简单:将元素流转换为元素流,其中第一个元素是原始流,第二个是原始流的尾部,第三个是尾部的尾部,依此类推。 ..

示例:(1, 2, 3, ...) 变为 ((1, 2, 3, ...), (2, 3, 4, ...), (3, 4, 5, ...) , ...)

我的问题不完全是如何获得这个流,因为它很简单,而是是否已经有一个方法或一个运算符以惯用的方式做到这一点。如果没有这样的方法,我也在为这个操作寻找一个合适的名称。我觉得展开或展开并没有真正确定它,而是沿着这些思路。

更新:背景是我有一个类型的函数,Stream[A] => B我想将它映射到输入流的所有后缀的流上。Stream[Stream[A]]因此,将流转换为第一个以便对其进行映射似乎是可行的。我需要一个正确的名称,因为这似乎是我的代码中反复出现的模式。

0 投票
2 回答
341 浏览

scala - 如何使用 api rest 传递 flink 流作为参数并返回转换后的流

我是 apache flink 的新手。我有一个使用来自 kafka 集群的数据的 flink scala 项目,我需要将流结果作为参数传递以使用返回转换后的流的 api。这是我的代码

任何帮助?

0 投票
1 回答
196 浏览

scala - Kotlin 序列是否缓存中间结果?

当使用诸如map, flatMap,+等功能 API 操作 Kotlin 序列时,计算的中间结果是否会被缓存,因此在第二次评估时不会重新计算?

如果不是,在某些情况下将Lists替换为 s 可能会导致复杂性呈指数级增长,并且官方文档Sequence中使用的“懒惰”一词似乎不足以区分这两种行为。

换句话说,与 Scala 相比,KotlinSequence更像 Scala Streams/ LazyLists(其中“一旦计算,一个值将保持计算并被重用。或者,如您所说,值被缓存。”)或Views(其中“所有每次需要从中获取元素时都会重新应用转换”)?(引自What is the difference between view, stream and iterator? | FAQ | Scala Documentation

0 投票
2 回答
73 浏览

scala - 惰性“take”函数如何进一步计算 Scala 流?

在 Martin Odersky 的“Scala 编程”一书中,有一个计算斐波那契数列的示例,它从作为参数传递给函数 fibFrom 的 2 个数字开始。

如果将方法 take() 应用于此递归函数,例如:

输出将是:

也许这个输出对于更有经验的人来说是显而易见的,但我不明白这个方法 take() 究竟是如何使流被进一步计算的。15 是否以某种方式不明显地传递到 fibFrom() 中?

0 投票
1 回答
108 浏览

scala - 当具有相同名称但用于不同集合的函数产生不同的副作用时,它是否是函数语言中的库错误?

我正在使用 Scala 2.13.1 并在工作表中评估我的示例。

首先,我定义了两个函数,它们将a到 ( z -1) 的范围返回为流或惰性列表。

然后我调用这两个函数,获取 3 个元素的 Stream/LazyList 并将它们转换为 List:

在这里我再次做同样的事情:

打印 1 是因为访问了函数并且打印语句在开头。没有惊喜。

但我不明白为什么额外的 4 是为惰性列表而不是流打印的。

我的假设是,在将 3 与下一个函数调用连接时,LazyList 版本会访问该函数,而在 Stream 版本中,该函数不会被访问。否则 4 将不会被打印。

这似乎是无意的行为,至少是出乎意料的。但是这种副作用的差异是否会被认为是一个错误,或者只是 Stream 和 LazyList 评估中的一个详细差异。

0 投票
1 回答
110 浏览

scala - 使用 playframework 和 scala 创建并流式传输 zip 文件

我的 scala-play api 提供端点以通过 -function 将文件作为流返回Ok.chunked

我现在希望能够允许以 zip 存档的形式下载多个文件。

我想创建一个 zip 文件作为流,播放应该直接作为文件流返回。这意味着无需将 zip 文件临时保存在光盘上并在创建时提供它。

实现创建此流的函数的好方法是什么?

0 投票
1 回答
97 浏览

scala - 具有 Stream 类型的 Scala 递归实现

我已经开始在 Coursera 上学习 Scala 并且有一些关于squareRootGuess实现的问题如下

我正在尝试实施标准来过滤sqrtGuess定义中的准确猜测,如下所示,但它给了我堆栈溢出错误。

但是,如果我们在外部定义 isSufficientsqrtGuess并应用于sqrtGuess流,则效果很好。

我想知道在第一次实施中会发生什么sqrtGuess?我正在尝试使用替换模型来证明它,但它似乎没有任何问题。