Scala 在两个case类中合并非null字段

Scala 在两个case类中合并非null字段,scala,shapeless,Scala,Shapeless,我试图将示例从无形状库修改为只合并非空字段 object mergeSyntax { implicit class MergeSyntax[T](t: T) { def merge[U](u: U)(implicit merge: CaseClassMerge[T, U]): T = merge(t, u) } } trait CaseClassMerge[T, U] { def apply(t: T, u: U): T } object CaseClassMerge {

我试图将示例从无形状库修改为只合并非空字段

object mergeSyntax {
  implicit class MergeSyntax[T](t: T) {
    def merge[U](u: U)(implicit merge: CaseClassMerge[T, U]): T = merge(t, u)
  }
}

trait CaseClassMerge[T, U] {
  def apply(t: T, u: U): T
}

object CaseClassMerge {
  import ops.record.Merger

  def apply[T, U](implicit merge: CaseClassMerge[T, U]): CaseClassMerge[T, U] = merge

  implicit def mkCCMerge[T, U, RT <: HList, RU <: HList]
    (implicit
      tgen: LabelledGeneric.Aux[T, RT],
      ugen: LabelledGeneric.Aux[U, RU],
      merger: Merger.Aux[RT, RU, RT]
    ): CaseClassMerge[T, U] =
    new CaseClassMerge[T, U] {
      def apply(t: T, u: U): T =
        tgen.from(merger(tgen.to(t), ugen.to(u)))
    }
}
对象合并语法{ 隐式类合并语法[T](T:T){ def merge[U](U:U)(隐式合并:CaseClassMerge[T,U]):T=merge(T,U) } } 特征案例类合并[T,U]{ def应用(t:t,u:u):t } 对象CaseClassMerge{ 导入操作、记录、合并 def apply[T,U](隐式合并:CaseClassMerge[T,U]):CaseClassMerge[T,U]=合并
隐式def mkCCMerge[T,U,RT您可以将自己的隐式合并实现添加到当前范围,覆盖标准合并:

objectnotnullhlistmerge{
导入未成型的。已标记_
导入shapeless.ops.record.merge
导入shapeless.ops.record.Remover
隐式def notnullhlistmerge[K,V,T