我有一个特质,我知道参考平等从来不是平等的正确实现.特征的实现可以由许多用户编写,实践表明有时他们无法重写等于.有办法要求吗?
在实践中,实现通常是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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。