簡體   English   中英

庫級別的 HList(DValue[A], DValue[B]) 到 HList(A, B)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM