Рассмотрим следующее:Scala: Преобразование Sealed Trait экземпляра к HList
sealed trait baseData {
def weight: Int
def priority: Int
}
case class data1(override val weight: Int, override val priority: Int) extends baseData
Как бы я определить функцию со следующей подписью, меняющих data1
в HList?
def toHlist[A <: baseData] (data: A) = {}
Я хочу передать в черте, например в toHlist
функции вместо фактического класса случае, потому что будет больше, чем один случай класса расширения черты. Я также не хочу жестко кодировать любые поля; Я ищу полностью общее решение.
Я уверен, что это выполнимо с библиотекой Shapeless, но не удалось выяснить, как это сделать.
EDIT
toHList
должен быть в состоянии обрабатывать baseData
указатель на экземпляр случай класса, как так:
val data: baseData = data1(1,2)
toHlist(data)
Причина этого заключается в том, что мы будем иметь более чем один случай класс продолжается baseData
, и теперь мы узнаем, какой из них должен пройти до toHlist
до времени выполнения.
Спасибо! Это работает с 'toHlist (data1 (23, 13))', но не будет, если мы все, что у нас есть, является указателем на базовый признак: 'val data: baseData = data1 (23,13)', 'toHlist (данные) '. В моем случае я не буду знать, какой класс класса должен пройти до выполнения. Есть идеи? –
Не могли бы вы обновить свой вопрос в свете вышесказанного? –
См. Выше. Благодаря! –