我想使用无形镜头通过字符串定义访问案例类字段的值。
我知道这段代码有效。
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类字段的值?
感谢。
答案 0 :(得分:1)
你应该在这里使用Symbol
('id
)而不是String
("id"
)。
从Symbol
String
Symbol(fieldName)
是运行时操作,Shapeless在编译时运行。
为什么不能使用符号?