案例案例遗传在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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |