首页 > 解决方案 > Zio Zlayer 无法作为接口或实现返回

问题描述

我正在使用 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)

标签: scalazio

解决方案


推荐阅读