Scala,Tupler 类型返回到 HList

Scala, Tupler type back to an HList

假设我在一个简单的 class

中有一个可用的元组
class Tupling[L <: HList, TP](tupler:Tupler.Aux[L, TP])

这样我就可以创建一个接受相应元组作为参数的函数

def toHlist(value:TP):L

如何实现功能:toHList?

我发现以下内容不起作用

def toHlist(value:TP):L =
  shapeless.syntax.std.tuple.productTupleOps(value).productElements

如果我们查看您在 toHList 中使用的两个无形函数的实现:

  • productTupleOps 有一个以 Product 作为上限的类型参数,所以你需要指定 TP 是一个 Product.
  • productElements 需要元组 value.
  • Generic 类型 class 实例

你的 Tupling class 可能看起来像:

class Tupling[L <: HList, TP <: Product](tupler: Tupler.Aux[L, TP]) {
  def toHList(value: TP)(implicit gen: Generic.Aux[TP, L]): L = 
    shapeless.syntax.std.tuple.productTupleOps(value).productElements
}

您也可以只使用隐式转换 productTupleOps 而不是自己应用它 :

import shapeless.syntax.std.tuple._
class Tupling[L <: HList, TP <: Product](tupler: Tupler.Aux[L, TP]) {
  def toHList(value: TP)(implicit gen: Generic.Aux[TP, L]): L = 
    value.productElements
}

您也可以将隐式参数添加到构造函数而不是 toHList 函数。