[英]HList(DValue[A], DValue[B]) to HList(A, B) at library level?
我正在構建一個數據綁定庫,它有 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 來說是可能的嗎? 或者還有其他有助於實現這一目標的東西?
shapeless.ops.hlist.Mapper
允許您使用Poly
function 執行此操作。
不幸的是,它的文檔不是很好; 您可能需要深入了解源代碼才能了解如何使用它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.