我正在使用 zio 编写一些简单的程序,但无法让 Zlayer 成为 triat 类型。如果我删除了 intellij 添加的类型,它不会编译,但删除后它工作正常。
我是 zio 的新手,想更好地理解。下面的三个代码是一个非常简单的示例,也可以在此处的 scastie 上找到
我想要一个 Zlayer 需要AandB和 return ABService,我无法弄清楚如何。
我得到了编译错误serviceAB2并且serviceAB3这个编译错误是不友好和令人困惑的。
什么是返回类型serviceAB1
import zio._
trait A{
def run():Unit
}
case class AA(a:A) extends A{
override def run() = println("A")
}
val serviceA = ZLayer.fromService(AA)
trait B{
def run():Unit
}
val serviceB = ZLayer.succeed{
new B{
override def run():Unit = println("B")
}
}
trait ABService{
def run():Unit
}
case class AB(a:A,b:B) extends ABService{
override def run() = {
a.run()
b.run()
}
}
val serviceAB1 = ZLayer.fromServices(AB)
val serviceAB2:ZLayer[Has[A] with Has[B], Nothing, Has[AB]] = ZLayer.fromServices(AB)
val serviceAB3:ZLayer[Has[A] with Has[B], Nothing, Has[ABService]] = ZLayer.fromServices(AB)