微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

scala – 强制特征的所有实现覆盖等于

我有一个特质,我知道参考平等从来不是平等的正确实现.特征的实现可以由许多用户编写,实践表明有时他们无法重写等于.有办法要求吗?

在实践中,实现通常是case类,其重载等于自动,我们可以通过将Product作为特征的自身类型来实现,但是,我想看到一个解决方案,允许非case类覆盖equals好(编辑:使用scala.Equals作为自我类型更接近于我想要的,因为它仍然由案例类自动实现,但可以由非案例类实现,并不是人的大负担写实现).

在编写这个问题时,我想到的另一种方法是在trait中重写equals以调用抽象方法,但不幸的是,这对于case类实现不起作用.

解决方法

为什么不使用类型契约而不是纯粹的特质? We have one alreadyscalaz,它容易粘合与等于特征:

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 举报,一经查实,本站将立刻删除。

相关推荐