带有 Rng 库的随机值流



我正在查看 Rng 源代码,看看它们如何生成随机值流。

def stream[AA >: A](s: Size): Rng[EphemeralStream[AA]] = 
  list(s) map (EphemeralStream(_: _*))

首先,我对这个签名感到困惑。我需要一个无限流的生成器,它懒惰地产生随机值。所以我不需要size论点。

我也对实现感到困惑。生成器似乎创建了一个列表,然后将其转换为流。然而,流的全部意义在于懒惰。我错过了什么?

我不知道

Stream,但我们可以用scalaz-stream Process明确地做这样的事情:

def infiniteRandomProcess: Process[Rng, Int] =
  Process.await(Rng.int)({
    i => Process.emit(i) ++ infiniteRandomProcess
  })

然后你转换懒惰的Process,直到你得到一些你乐于run的东西(或runLog等等(,你最终得到一个Rng值(或者可能是一个单子变压器,它结合了例如 Task (。

API可能允许将其转换为Stream;有很多,我倾向于停留在浅端。

相关内容

  • 没有找到相关文章

最新更新