Scala 类型参数化,Shapeless - 找不到参数 Generic 的隐式值
Posted
技术标签:
【中文标题】Scala 类型参数化,Shapeless - 找不到参数 Generic 的隐式值【英文标题】:Scala type parameterization, Shapeless - could not find implicit value for parameter Generic 【发布时间】:2017-03-15 09:55:04 【问题描述】:我无法使用 scala 类型参数化函数实现 shapeless.Generic。在以下代码中,我收到错误“找不到参数 gen 的隐式值:shapeless.Generic[T]”。
def foo[T](instance: T) =
val gen = shapeless.Generic[T] //getting error in this line!!!
val values = gen.to(instance)
println(values)
case class Bar(x:String, y:String)
var bar = Bar("a","b")
foo(bar)
我有什么遗漏吗?
【问题讨论】:
【参考方案1】: def foo[T, HL <: HList](instance: T)(
implicit gen: Generic.Aux[T, HL]
) =
val values = gen to instance
println(values)
case class Bar(x: String, y: String)
您通常需要使用Aux
模式,泛型是宏具体化的,但会产生一个作为抽象类型成员公开的任意类型。如果你还不明白这里的所有单词,请阅读更多here。
【讨论】:
谢谢,没想到这么简单。另外,感谢您让我了解辅助模式,我也会浏览您提供的链接。 :) @RaKa 很高兴为您提供帮助,您会发现 Miles 是一个了不起的人,还有很多其他人在 shapeless 背后。以上是关于Scala 类型参数化,Shapeless - 找不到参数 Generic 的隐式值的主要内容,如果未能解决你的问题,请参考以下文章