Использование бесформенных линз с определением строки - PullRequest
0 голосов
/ 18 мая 2018

Я бы хотел использовать бесформенные линзы для доступа к значению поля класса дела по определению String.

Я знаю, что этот код работает.

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

val lens = lens[Test] >> 'id

val valueOfFieldId = lens.get(instance)

Но что я пытаюсь сделатьis:

 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; / * ### лист ### создан $$ end $$ * / lazy val lens = lens [Test] >> str.witness

Можно ли получить значение поля класса case с определением String?

Спасибо.

1 Ответ

0 голосов
/ 19 мая 2018

Вы должны использовать Symbol ('id) здесь вместо String ("id").

Создание Symbol из String

Symbol(fieldName)

- это операция во время выполнения, а Shapeless работает во время компиляции.

Почему вы не можете использовать символы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...