Scala (Slick) Разделение HList на классы case

в настоящее время у меня есть HList с более чем 22 полями, и теперь я хочу разделить его на

2-3 класса case, есть ли простой функциональный способ сделать это? В настоящее время я использую следующий синтаксис:

CaseClass1(c.head, c.tail.head, c.tail.tail.head, etc...)

Однако это кажется неправильным, так как теперь у меня действительно большая хвостовая часть..


person Christian Schmitt    schedule 22.06.2015    source источник


Ответы (1)


Используя функциональность кортежа в shapeless, вы можете сделать:

import shapeless._
import syntax.std.tuple._

case class Foo(a: Int, b: String)

val hlist =  1 :: "a" :: 2 :: "b" :: HNil
Foo.tupled(hlist.take(2).tupled)
person Peter Neyens    schedule 22.06.2015
comment
Я на shapeless 2.2 и на самом деле получаю: could not find implicit value for parameter take: shapeless.ops.tuple.Take - person Christian Schmitt; 22.06.2015
comment
@ChristianSchmitt Итак, если вы попробуете (1 :: "a" :: HNil).take(1) в консоли, вы не получите 1 :: HNil ? - person Peter Neyens; 22.06.2015
comment
Это гладкий список: import slick.collection.heterogeneous._ не может его изменить, он автоматически генерируется slick - person Christian Schmitt; 22.06.2015
comment
Превратить Slick HList в бесформенный HList не так просто. В этой проблеме Slick есть некоторая информация и неработающий код. - person Peter Neyens; 22.06.2015