无定义隐式val LabelledGeneric在定义case类的方法中找不到

时间:2014-05-05 05:46:11

标签: scala shapeless

我发现无形镜头有一个有趣的问题,这是代码:

case class Person(name : String, age : Int)
val nameLens     = lens[Person] >> 'name

(1):如果我在扩展App的对象中定义它,它就可以了。

object mainLensSpec extends App {
   import shapeless._
   case class Person(name : String, age : Int)
   val nameLens     = lens[Person] >> 'name
}

(2)。如果我在main方法中定义它,它就不起作用。

object mainLensSpec {
def main(args: Array[String]) {
    import shapeless._
    case class Person(name : String, age : Int)
    val nameLens     = lens[Person] >> 'name
}

错误讯息: 找不到shapeless类型的证据参数的隐含值.LabelledGeneric [Person] {type Repr = Out0} val nameLens = lens [Person]>> “名称

但是,如果我将定义案例类Person移出方法,它会再次运行!

  object mainLensSpec {
    import shapeless._
    case class Person(name : String, age : Int)

    def main(args: Array[String]) {
        val nameLens     = lens[Person] >> 'name
    }

我的问题是

(1)。如果使用镜头在同一方法中定义的case类,隐含值不在范围内。

(2)当无形将要创建LabelledGeneric [Person]并注入>> Lens中定义的方法。

很多很多人都提前感谢,镜头很强大,对我来说很困惑。

1 个答案:

答案 0 :(得分:1)

我很确定这是一个Scala编译器错误。我在bug数据库中找不到你刚才看到的问题的完全匹配,但感觉它可能是SI-4225的亲戚。