加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读