我在项目上使用Slick,为此,我需要对行进行Slick表示,然后对内存进行表示。为了简洁起见,我将在这里使用一个更简单的示例。例如,我有以下两种类型:
type RawType =
(String, Int, Boolean)
type RawTypeRep =
(Rep[String], Rep[Int], Rep[Boolean])
是否有一种方法可以从另一个生成一个,所以我不必同步更新它们?
还是从案例类中生成它们?我确实有一个案例类表示形式,但是它实际上与我所拥有的类型略有不同,因为当我对案例类进行水合处理时,我做了一些突变,导致类型改变。
答案 0 :(得分:0)
这似乎是shapeless的工作,尽管我不确定将其应用于案件的最佳方法。我能想到的最好的办法不是彼此生成一个,而是至少在编译时验证两者是否匹配:
import shapeless._
import shapeless.poly._
import shapeless.ops.tuple._
object ToRep extends (Id ~> Rep) {
def apply[A](a: A): Rep[A] = ???
}
type CheckRep[A, B] = Mapper.Aux[A, ToRep.type, B]
type RawType = (String, Int, Boolean)
type RawTypeRep = (Rep[String], Rep[Int], Rep[Boolean])
type RawTypeRepWrong = (Rep[String], Rep[String], Rep[Boolean])
implicitly[CheckRep[RawType, RawTypeRep]] // compiles
implicitly[CheckRep[RawType, RawTypeRepWrong]] // compile error
我猜想,考虑到更大的背景,可能有更好的方法来处理此问题。也许值得浏览一下无形的文档,看看它可以做的事情,看看是否能给您带来任何想法。