【发布时间】:2018-11-20 07:34:48
【问题描述】:
我有这种类型,它将通过 shapeless 生成:
type hlistt = STUDENT.type :: AUTO_LOANS.type :: HNil
基本上,我有一堆扩展特征的案例对象,因此我设法创建了一个方法,该方法将所有案例对象的实例作为 HList 提供给我
然后使用import shapeless.ops.hlist.Last和init我写了一个方法来检索HList中的一个节点,如果值等于字符串“student”:
def getLast(hl:hlistt) = {
val last0=Last[hlistt]
val la=last0(hl)
if (la.value == "student") la
else init(hl)
}
问题是,如果我调用此方法,我将无法从 HList 中获取正确的节点类型。
getLast(STUDENT :: AUTO_LOANS :: HNil)
该方法有效并返回节点但类型为关闭:
Product with Serializable = STUDENT :: HNil
我是否需要一些 Witness/Aux 隐式来返回正确的类型?
【问题讨论】:
-
这不是重现您描述的结果的正确代码。一方面,所发布的
getLast()不是递归的。 -
@jwvh 好点 - 我在深夜(我的时间)写了这篇文章,最初是在考虑递归 fn。我的意思是把
init(hl)包装成getLast(init(hl))