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
函数。
假设我在一个简单的 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
函数。