无形记录通过符号获得价值

时间:2017-11-03 22:09:47

标签: scala shapeless

尝试提取字段值,但在使用符号

调用时不起作用
case class Dog(name: String, age: Int)
val dog = Dog("rocky", 5)
val repr = LabelledGeneric[Dog].to(dog)
val sy = 'name
repr.get(sy)

但如果我这样做

repr.get('name)

1 个答案:

答案 0 :(得分:1)

第一个示例有效,因为宏扩展实际上将Symbol实例转换为Witness实例(使用Witness.mkWitness),这实际上是repr.get所期望的。

为了完成这项工作,我们需要创建一个我们想要的Witness实例:

import shapeless.{LabelledGeneric, Witness}

case class Dog(name: String, age: Int)
val dog = Dog("rocky", 5)

val repr = LabelledGeneric[Dog].to(dog)
val nameWitn = Witness('name)
repr.get(nameWitn)