【发布时间】:2022-06-15 20:24:14
【问题描述】:
我正在构建一个数据绑定库,它有 3 个基本类
trait DValue[+T] {
def get:T
}
class DField[T] extends DValue[T] {
// allow writes + notifying observers
}
class DFunction[T](deps:DValue[_]*)(compute :=> T) extends DValue[T] {
def get = compute // internally compute will use values in deps
}
但是,在这种方法中,DFunction 的定义不是很可靠 - 它要求 DFunction 的用户确保将计算中使用的所有 DValue 都放入“deps”列表中。所以我希望用户能够做这样的事情:
val dvCount:DValue[Int] = DField(3)
val dvElement:DValue[String] = DField("Hello")
val myFunction = DFunction(dvCount, dvElement) { (count, element) => // compiler knows their type
Range(count).map(_ => element).toSeq
}
正如您在构建“myFunction”时所看到的,所引用的字段和用法已清晰映射。 我觉得也许 HList 可以让我在库级别提供一些允许这样做的东西,但我不知道如何使用 HList 实现这一点?或者还有什么可以帮助实现这一目标的?
【问题讨论】:
标签: scala shapeless scala-cats