Scala,Tupler类型返回到HList

Scala,Tupler类型返回到HList,scala,shapeless,Scala,Shapeless,假设我在一个简单的类中有一个可用的元组 class Tupling[L <: HList, TP](tupler:Tupler.Aux[L, TP]) 如何实现函数:toHList 我发现以下方法不起作用 def toHlist(value:TP):L = shapeless.syntax.std.tuple.productTupleOps(value).productElements 如果我们看一下您在toHList中使用的两个不成形函数的实现: 有一个类型参数,其上限为Pro

假设我在一个简单的类中有一个可用的元组

class Tupling[L <: HList, TP](tupler:Tupler.Aux[L, TP])
如何实现函数:
toHList

我发现以下方法不起作用

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

如果我们看一下您在
toHList
中使用的两个不成形函数的实现:

  • 有一个类型参数,其上限为
    Product
    ,因此需要指定
    TP
    Product
  • 需要元组值的
    泛型
    类型类实例
然后,您的
Tupling
类可以如下所示:

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
}
您还可以将隐式参数添加到构造函数中,而不是
toHList
函数

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
}
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
}