问题标签 [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.
scala - 如何在 akka 流中模拟 Sink?
我有一个简单的“保存”功能正在使用akka-stream-alpakka
multipartUpload
,它看起来像这样:
我想测试这个功能,2种情况:
- 那 multipartUpload 成功了,我得到了 AWSLocation (我的案例类)。
- multipartUpload 失败,我得到 S3Exception
所以我想监视 multipartUpload 并返回我自己的接收器,如下所示:
问题是我明白了Error:(47, 93) akka.stream.scaladsl.Sink.type does not take parameters
,我知道我不能像这样创建水槽,但我该怎么做?或者有什么更好的测试方法?
scala - Scala Stream.grouped 将整个流缓冲到内存中
调用grouped
ScalaStream
似乎会将整个流缓冲到内存中。我在这里挖了很多东西来确定哪个类持有对 Stream 头部的引用。
一个简单的例子:
如果运行此代码并在foreach
函数中放置一个断点,则可以看到在 Stream 的头部被绘制时有一个引用。
经过多次迭代,内存中仍然存在对 Stream 早期“块”的引用:
此外,如果我们检查对 Stream 头部的引用,我们可以看到 IterableLike 中的一些 lambda 持有一个引用。
在grouped
上调用时Stream
,Collections 库首先调用,返回 a ,然后在该迭代器上调用,返回iterator
a 。上面的屏幕截图表明,内部的某些东西似乎抓住了 Stream 的头部,但我无法确定是什么。Stream
StreamIterator
grouped
GroupedIterator
GroupedIterator
我的问题是双重的: 1. 这是 Scala Streams 的预期行为吗?如果不是,在 StreamIterator 和 GroupedIterator 的实现中发生了什么导致 Stream 的头部在运行.grouped(N)
时被保留Stream
?
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));
scala - 将 Scala 流转换为流的操作符或方法(给定流的后缀)
问题很简单:将元素流转换为元素流,其中第一个元素是原始流,第二个是原始流的尾部,第三个是尾部的尾部,依此类推。 ..
示例:(1, 2, 3, ...) 变为 ((1, 2, 3, ...), (2, 3, 4, ...), (3, 4, 5, ...) , ...)
我的问题不完全是如何获得这个流,因为它很简单,而是是否已经有一个方法或一个运算符以惯用的方式做到这一点。如果没有这样的方法,我也在为这个操作寻找一个合适的名称。我觉得展开或展开并没有真正确定它,而是沿着这些思路。
更新:背景是我有一个类型的函数,Stream[A] => B
我想将它映射到输入流的所有后缀的流上。Stream[Stream[A]]
因此,将流转换为第一个以便对其进行映射似乎是可行的。我需要一个正确的名称,因为这似乎是我的代码中反复出现的模式。
scala - 如何使用 api rest 传递 flink 流作为参数并返回转换后的流
我是 apache flink 的新手。我有一个使用来自 kafka 集群的数据的 flink scala 项目,我需要将流结果作为参数传递以使用返回转换后的流的 api。这是我的代码
任何帮助?
scala - Kotlin 序列是否缓存中间结果?
当使用诸如map
, flatMap
,+
等功能 API 操作 Kotlin 序列时,计算的中间结果是否会被缓存,因此在第二次评估时不会重新计算?
如果不是,在某些情况下将List
s替换为 s 可能会导致复杂性呈指数级增长,并且官方文档Sequence
中使用的“懒惰”一词似乎不足以区分这两种行为。
换句话说,与 Scala 相比,KotlinSequence
更像 Scala Stream
s/ LazyList
s(其中“一旦计算,一个值将保持计算并被重用。或者,如您所说,值被缓存。”)或View
s(其中“所有每次需要从中获取元素时都会重新应用转换”)?(引自What is the difference between view, stream and iterator? | FAQ | Scala Documentation)
scala - 惰性“take”函数如何进一步计算 Scala 流?
在 Martin Odersky 的“Scala 编程”一书中,有一个计算斐波那契数列的示例,它从作为参数传递给函数 fibFrom 的 2 个数字开始。
如果将方法 take() 应用于此递归函数,例如:
输出将是:
也许这个输出对于更有经验的人来说是显而易见的,但我不明白这个方法 take() 究竟是如何使流被进一步计算的。15 是否以某种方式不明显地传递到 fibFrom() 中?
scala - 当具有相同名称但用于不同集合的函数产生不同的副作用时,它是否是函数语言中的库错误?
我正在使用 Scala 2.13.1 并在工作表中评估我的示例。
首先,我定义了两个函数,它们将a到 ( z -1) 的范围返回为流或惰性列表。
然后我调用这两个函数,获取 3 个元素的 Stream/LazyList 并将它们转换为 List:
在这里我再次做同样的事情:
打印 1 是因为访问了函数并且打印语句在开头。没有惊喜。
但我不明白为什么额外的 4 是为惰性列表而不是流打印的。
我的假设是,在将 3 与下一个函数调用连接时,LazyList 版本会访问该函数,而在 Stream 版本中,该函数不会被访问。否则 4 将不会被打印。
这似乎是无意的行为,至少是出乎意料的。但是这种副作用的差异是否会被认为是一个错误,或者只是 Stream 和 LazyList 评估中的一个详细差异。
scala - 使用 playframework 和 scala 创建并流式传输 zip 文件
我的 scala-play api 提供端点以通过 -function 将文件作为流返回Ok.chunked
。
我现在希望能够允许以 zip 存档的形式下载多个文件。
我想创建一个 zip 文件作为流,播放应该直接作为文件流返回。这意味着无需将 zip 文件临时保存在光盘上并在创建时提供它。
实现创建此流的函数的好方法是什么?
scala - 具有 Stream 类型的 Scala 递归实现
我已经开始在 Coursera 上学习 Scala 并且有一些关于squareRootGuess
实现的问题如下
我正在尝试实施标准来过滤sqrtGuess
定义中的准确猜测,如下所示,但它给了我堆栈溢出错误。
但是,如果我们在外部定义 isSufficientsqrtGuess
并应用于sqrtGuess
流,则效果很好。
我想知道在第一次实施中会发生什么sqrtGuess
?我正在尝试使用替换模型来证明它,但它似乎没有任何问题。