我对ZIO中的许多不同方法感到困惑,它们似乎是在做同样的事情(至少在我这个新手的眼里)。
特别是像这样的东西:
vs
这两个片段是在做同样的事情吗?如果不是,有什么区别?如果是,为什么会有两个?在什么情况下会使用其中一个而不是另一个?
特别是像这样的东西:
val layer: RLayer[ServiceA with ServiceB, ServiceC] = ZLayer.scoped {
for {
a <- ZIO.service[ServiceA]
b <- ZIO.service[ServiceB]
} yield new ServiceCImpl(a, b)
}
vs
val layer2: RLayer[ServiceA with ServiceB, ServiceC] = ZLayer.fromZIO {
for {
a <- ZIO.service[ServiceA]
b <- ZIO.service[ServiceB]
} yield new ServiceCImpl(a, b)
}
这两个片段是在做同样的事情吗?如果不是,有什么区别?如果是,为什么会有两个?在什么情况下会使用其中一个而不是另一个?
fromFunction
,我的理解是它是fromZIO
的一个简单情况的"捷径"。但是关于作用域资源,你能详细解释一下它是如何工作的吗?"作用域"到底是什么意思?如果我使用ZLayer.scoped(ZIO.from(Source.fromFile("foo")))
,它会在某个时刻自动关闭文件吗?具体是什么时候?它又是如何知道如何"关闭"我的资源的呢? - undefinedacquireRelease
相关的内容。但是我不能确定,无法给出更确切的答案。 - undefined