无形镜片用于字符串定义

时间:2018-05-18 20:23:13

标签: scala shapeless lenses

我想使用无形镜头通过字符串定义访问案例类字段的值。

我知道这段代码有效。

case class Test(id: String, calc: Long)
val instance = Test("123232", 3434L)

val lens = lens[Test] >> 'id

val valueOfFieldId = lens.get(instance)

但我想做的是:

 val fieldName = "id"

 val lens = lens[Test] >> fieldName.witness
//I typed .witness because it was expecting a witness (if I am not wrong)

 val valueOfFieldId = lens.get(instance)

但是使用此代码,我收到此错误。

找不到参数mkLens的隐含值:shapeless.MkFieldLens [A $ A148.this.Test,A $ A148.this.str.type] def get $$ instance $$ lll = lll; / * ### worksheet ### generated $$ end $$ * / lazy val lens = lens [Test]>> str.witness

是否可以使用String定义获取case类字段的值?

感谢。

1 个答案:

答案 0 :(得分:1)

你应该在这里使用Symbol'id)而不是String"id")。

Symbol

创建String

Symbol(fieldName)

是运行时操作,Shapeless在编译时运行。

为什么不能使用符号?