gpt4 book ai didi

scala - 案例类继承有什么*严重*的错误?

转载 作者:行者123 更新时间:2023-12-03 05:32:31 31 4
gpt4 key购买 nike

在寻找其他东西时,完全出于巧合,我偶然发现了一些关于案例类继承是多么邪恶的评论。有一个叫做 ProductN 的东西,可怜虫和国王, Sprite 和巫师,以及案例类继承如何丢失某种非常理想的属性。那么案例类继承有什么问题呢?

最佳答案

一个词:平等

case 类附带了 equalshashCode 的提供实现。等价关系,称为equals,其工作方式如下(即必须具有以下属性):

  1. 对于所有xx 等于 xtrue(自反)
  2. 对于xyz;如果x等于yy等于zx等于z(传递)
  3. 对于xy;如果x等于yy等于x(对称)

一旦您允许继承层次结构中的相等性,您就可以打破 2 和 3。以下示例简单地演示了这一点:

case class Point(x: Int, y: Int)
case class ColoredPoint(x: Int, y: Int, c: Color) extends Point(x, y)

然后我们有:

Point(0, 0) equals ColoredPoint(0, 0, RED)

但是不是

ColoredPoint(0, 0, RED) equals Point(0, 0)

您可能会说所有类层次结构都可能存在此问题,这是事实。但是案例类的存在是专门为了从开发人员的角度(以及其他原因)简化平等性而存在的,因此让它们的行为非直观将成为自己目标的定义!

<小时/>

还有其他原因;值得注意的是 copy did not work as expectedinteraction with the pattern matcher .

关于scala - 案例类继承有什么*严重*的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11158929/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com