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 的隐式值的主要内容,如果未能解决你的问题,请参考以下文章

找不到参数元组的隐式值

Scala隐式转换

如何在Scala中实例化由类型参数表示的类型实例

Scala的下一步

Scala的柯里化和函数的部分施用

Scala类参数化中附加冒号的含义