假设我在一个简单的类中有一个可用的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
答案 0 :(得分:0)
如果我们看一下您在toHList
中使用的两个无形函数的实现:
productTupleOps
的类型参数的上限为Product
,因此您需要指定TP
为Product
。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
}
函数。