案例案例遗传在Scala
发布时间:2020-12-16 19:02:11  所属栏目:安全  来源:网络整理 
            导读:我有一个抽象类,我扩展并制作了许多案例类.现在我想复制这些case类的实例,只是改变第一个参数,所以我使用case类’copy方法. 由于我必须为所有从普通抽象类中扩展的案例类执行此操作,而不是为所有这些类执行此操作,所以我尝试使其通用,并将抽象类作为案例类.
                
                
                
            | 
 我有一个抽象类,我扩展并制作了许多案例类.现在我想复制这些case类的实例,只是改变第一个参数,所以我使用case类’copy方法. 
  
  由于我必须为所有从普通抽象类中扩展的案例类执行此操作,而不是为所有这些类执行此操作,所以我尝试使其通用,并将抽象类作为案例类. 然后Scala给我这个: 
 码: abstract class Organism(legs: Int) case class Octopus(override val legs: Int,weight: Double,...) case class Frog(override val legs: Int,...) def clone(o: Organism) = o.copy(legs = -1) 这是我想做的但是,如果我无法使克隆方法工作,那么我将不得不为八达通和青蛙. 任何建议,减少这个冗长度? 解决方法
 你不能一般地抽象出案例类的复制方法.我建议使用来自Shapeless或Monocle的镜片: 
  
  
  trait Organism { def legs: Int }
// monocle @Lenses uses a macro to generate lenses
@Lenses case class Octopus(override val legs: Int,...)
  extends Organism
@Lenses case class Frog(val legs: Int,...) extends Organism
def clone[O <: Organism](o: O,legsLens: Lens[O,Int]): O =
  legsLens.set(-1)(o)
val myOctopus = Octopus(8,2.4,...)
val myFrog = Frog(2,...)
// use the generated Lenses
val cloneOctopus: Octopus = clone(myOctopus,Octopus.legs)
clone(myFrog,Frog.legs)(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
