【发布时间】:2018-08-31 05:57:35
【问题描述】:
如果我用scanLeft 处理来自stdin 的输入,则结果输出总是比我的最后一个输入晚一行:
io.Source.stdin
.getLines
.scanLeft("START:")((accu, line) => accu + " " + line)
.foreach(println(_))
结果(我的手动输入前面是>):
> first
START:
> second
START: first
> third
START: first second
我想要的合理输出是:
> first
START: first
> second
START: first second
> third
START: first second third
如您所见,第一个输入行之后的输出应该已经包含了第一个输入行的字符串。
我已经尝试过使用.scanLeft(...).drop(1).foreach(...),但这会导致以下结果:
> first
> second
START: first
> third
START: first second
如何正确省略纯种子以获得所需的结果?
[更新] 目前,我对 Andrey Tyukin 的巧妙解决方法感到满意。非常感谢您的建议。
当然,如果有任何替代 scanLeft 的替代方案不会将种子作为第一项发送到以下迭代链中,我会更喜欢该解决方案。
[更新]
用户 jwvh 了解我的目标并为此提供了出色的解决方案。为了完善他们的建议,我寻求一种在将行发送到累积回调之前对其进行预处理的方法。因此,readLine 命令不应在累积回调中调用,而应在我可以预先添加的不同链链接中调用。
【问题讨论】: