假设我有两个案例类:
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个参数。有什么想法如何解决吗?
可以通过执行类似此线程的操作来完成此解决方案。
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))
希望能帮助到你 :)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句