gpt4 book ai didi

scala - 将一个案例类转换为具有相同结构但具有一个附加字段的另一案例类

转载 作者:行者123 更新时间:2023-12-02 12:51:20 26 4
gpt4 key购买 nike

假设我有两个案例类:

case class C1(a: Int, b: String)
case class C2(a: Int, b: String, c: Long = 0)

我想将 C1 的实例转换为 C2,然后设置附加字段 c。我找到了以下解决方案:

C1.unapply(C1(1, "s1")).map(v => C2(v._1, v._2, 7l))

但是一一指定参数是不适用的,因为实际案例类至少有 15 个参数。有什么解决办法吗?

最佳答案

可以通过执行类似此线程的操作来完成此解决方案。

How to append or prepend an element to a tuple in Scala

implicit class TupOps2[A, B](val x: (A, B)) extends AnyVal {
def :+[C](y: C) = (x._1, x._2, y)
def +:[C](y: C) = (y, x._1, x._2)
}

用法:

val c1      = new C1(1, "s1")
val longVal = 0L

scala> C1.unapply(c1).map(r => (r :+ longVal))
res0: Option[(Int, String, Long)] = Some((1,s1,0))

scala> C1.unapply(c1).map(r => (C2.apply _) tupled (r:+ longVal))
res45: Option[C2] = Some(C2(1,s1,0))

希望有帮助:)

关于scala - 将一个案例类转换为具有相同结构但具有一个附加字段的另一案例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55475690/

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