scala – 强制特征的所有实现覆盖等于
发布时间:2020-12-16 21:32:47 所属栏目:安全 来源:网络整理
导读:我有一个特质,我知道参考平等从来不是平等的正确实现.特征的实现可以由许多用户编写,实践表明有时他们无法重写等于.有办法要求吗? 在实践中,实现通常是case类,其重载等于自动,我们可以通过将Product作为特征的自身类型来实现,但是,我想看到一个解决方案,允
我有一个特质,我知道参考平等从来不是平等的正确实现.特征的实现可以由许多用户编写,实践表明有时他们无法重写等于.有办法要求吗?
在实践中,实现通常是case类,其重载等于自动,我们可以通过将Product作为特征的自身类型来实现,但是,我想看到一个解决方案,允许非case类覆盖equals好(编辑:使用scala.Equals作为自我类型更接近于我想要的,因为它仍然由案例类自动实现,但可以由非案例类实现,并不是人的大负担写实现). 在编写这个问题时,我想到的另一种方法是在trait中重写equals以调用抽象方法,但不幸的是,这对于case类实现不起作用. 解决方法
为什么不使用类型契约而不是纯粹的特质?
We have one already在
scalaz ,它容易粘合与等于特征:
import scalaz._ case class X(a:Int,b:Int) class Y(a:Int,b:Int) implicit def provideDefaultEqual[T <: Equals]:Equal[T] = new Equal[T] { def equal(a1: T,a2: T) = a1 == a2 } implicitly[Equal[X]] implicitly[Equal[Y]] //compile error 如果你需要连接你的特质,there is your own nice solution (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |