gpt4 book ai didi

scala - 使用shapeless scala合并两个不同case类的字段

转载 作者:行者123 更新时间:2023-12-04 10:36:38 25 4
gpt4 key购买 nike

我想将两个不同案例类的字段合并为一个案例类。

例如,如果我有以下案例类:

case class Test(name:String, questions:List[Question], date:DateTime)

case class Answer(answers:List[Answers])

我想要一种简洁的无形方式将两者合并为:
TestWithAnswers(name:String, questions:List[Question], date:DateTime, answers:List[Answer]). 

那里有一个很好的无形答案吗?

最佳答案

您可以使用无形Generic去做这个。

val t: Test = ???
val a: Answer = ???
val gt = Generic[Test]
val ga = Generic[Answer]
val gta = Generic[TestWithAnswers]

val ta = gta.from(gt.to(t) ++ ga.to(a))

或者好吧,如果你有单线的东西
val ta = Generic[TestWithAnswers].from(Generic[Test].to(t) ++ Generic[Answer].to(a))

提供 tTest 的一个实例和 aAnswer 的一个实例, ta将是 TestWithAnswers 的一个实例.

快速解释: Generic可以将 case 类转换为泛型 HList表示。因此,鉴于您的类的结构,您可以简单地将 test 和 answer 都转换为一个 hlist,将两个列表连接成一个列表并构建一个 TestWithAnswers从它的实例。

这是一个更简单的示例,您可以复制粘贴并在 REPL 中尝试
import shapeless._
case class A(a: Int)
case class B(a: String)
case class AB(a: Int, b: String)
Generic[AB].from(Generic[A].to(A(42)) ++ Generic[B].to(B("foo")))
// AB(42, "foo")

关于scala - 使用shapeless scala合并两个不同case类的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31681784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com