问题描述
我刚刚开始在 Scala 中使用 ZIO。我已经使用 ZIO 的 Gen
类型编写了一些 Scalacheck 样式的测试,它们似乎可以工作,但我想手动测试 REPL 中的生成器,以确保它们实际上生成了我期望的数据
问题:ZIO 中的所有内容都包装在 ZIO monad 中,我需要将正确的数据传递到这个 monad 中才能解包并查看结果。并且在 REPL 中没有解释如何执行此操作的文档。
我想我了解如何为没有环境依赖项的基本程序执行此操作:调用 zio.Runtime.default.unsafeRun
。但是 Gen
对象需要 Random with Sized
类型的环境,我不知道如何生成它的实例。
给定一个 Gen[Random with Sized,T]
,在 REPL 上执行它并获得 List[T]
生成值的最快方法是什么?
解决方法
我想我已经找到了部分解决方案,但我并不完全满意。
对于仅从 REPL 上的 Gen
打印一些示例,这是有效的:
zio.Runtime.default.unsafeRun(
yourGenerator
.runCollectN(50)
.provideLayer(zio.random.Random.live +!+ zio.test.Sized.live(100))
) foreach println
但我不认为这是应该完成的方式。 provideLayer
不会进行类型检查,除非我提供 Random
和 Sized
,即使 Random
应该是 zio.Runtime.default
的一部分。我认为 ZLayer
的某些方面我仍然不明白。