【发布时间】:2018-09-17 08:08:24
【问题描述】:
出于测试目的,我想懒惰地计算 2 个元素:
Stream(
{ Thread.sleep(2000); 1 },
{ Thread.sleep(2000); 2 },
Stream.empty[Int]
).foreach(println)
但运行此代码不会产生预期的结果。这些值似乎同时出现在输出中。原因是Stream() 构造函数采用了一个必须急切计算的数组。因此,为了解决这个问题,我不得不像这样手动创建流的 thunk:
(
{ Thread.sleep(2000); 1 } #::
{ Thread.sleep(2000); 2 } #::
Stream.empty[Int]
).foreach(println)
现在完全按照预期工作,但不是特别漂亮。
有没有一种更简洁、更方便的方法来获得与Stream(a, b, c) 语法相似但懒惰地评估参数的东西?
谢谢
【问题讨论】:
-
它可能应该句法相似但“语义上不等效”,因为这正是你的不同语义在后面。
标签: scala lazy-evaluation scala-streams