Scala,Tupler类型回到HList

时间:2015-11-29 14:29:34

标签: scala shapeless

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

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

1 个答案:

答案 0 :(得分:0)

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

  • productTupleOps的类型参数的上限为Product,因此您需要指定TPProduct
  • productElements需要元组Generic的{​​{1}}类型类实例。

您的value课程可能如下:

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 } 而不是自己应用:

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 } 函数。