Я использую Generic в моем уровне БД для преобразования экземпляров классов case в List[Any]
типов JDBC-жалоб. Таким образом, я следующий рисунок, повторяющий все времяНевозможно написать общую функцию для бесформенного Generic
val genSignal = LabelledGeneric[Signal]
genSignal.to(item).values.map(toSqlTypedHlist).toList
IntelliJ намекает, что values
неизвестно поле, но он компилирует. Поэтому я решил написать следующий метод
private def getSqlValuesFromCaseClass[T <: AnyRef : Generic](item : T) : Seq[Any] = {
val generic: Generic[T] = implicitly[Generic[T]]
generic.to(item).values.map(toSqlTypedHlist).toList
}
где toSqlTypedHlist
является
private object toSqlTypedHlist extends Poly1 {
implicit def atAnything[T: SqlTyped] = at[T](_.toSqlType)
}
но он не компилировать говорить, что
Error:(730, 22) value values is not a member of generic.Repr
generic.to(item).values.map(toSqlTypedHlist).toList
^
Что я здесь отсутствует?
UPD: Я обновил функцию следуя за советом Майлса, но это не помогло
private def getSqlValuesFromCaseClass[T <: AnyRef : Generic](item : T) : Seq[Any] = {
val generic: Generic[T] = implicitly[Generic[T]]
generic.to(item).map(toSqlTypedHlist).toList
}
Я получаю следующее сообщение об ошибке
Error:(73, 22) value map is not a member of generic.Repr
generic.to(item).map(toSqlTypedHlist).toList
^
Можете ли вы сказать, что такое 'toSqlTypedHlist'? Это бесформенный «Поли»? –
@MilesSabin Удовольствие вас, Майк. 'toSqlType' является функцией неявного класса: https://github.com/cppexpert/article-reader/blob/master/src/main/scala/co/kernelnetworks/medstream/server/db/package.scala#L21-L24 – expert
Вы указали мне на 'toSqlTyped', который является обычным методом Scala. Мне нужно увидеть определение 'toSqlTypedHList', которое, я думаю, должно быть бесформенным« Poly », если этот первый фрагмент компилируется. –