scala - Zio Zlayer 无法作为接口或实现返回
问题描述
我正在使用 zio 编写一些简单的程序,但无法让 Zlayer 成为 triat 类型。如果我删除了 intellij 添加的类型,它不会编译,但删除后它工作正常。
我是 zio 的新手,想更好地理解。下面的三个代码是一个非常简单的示例,也可以在此处的 scastie 上找到
我想要一个 Zlayer 需要A
andB
和 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)
解决方案
推荐阅读
- python - PySpark: Populating a column based on the last occurance of one of the values in a different column
- html - 切换侧边栏按钮在 Safari 中不可见
- ios - 为什么在swift中使用自定义UITableViewCell时没有内容
- java - 如何修复 pdfbox 中的 FileNotFoundException pdbox.cache EROFS
- javascript - 为什么我的函数将总属性附加到所有单独的数组?
- flutter - 从屏幕右侧将动画翻译到外部
- java - 在流中找到满足该元素的条件的第一个元素
- acumos - Error executing cmn-data-svc-ddl-dml-mysql-2.2-sql during AIO
- ios - Auto-generated Core Data accessor returns deleted objects
- php - Pagesource shows only html tags using phantomjs