为什么Scala3部分类型相等对比报Equality错误无需导入strictEquality
Scala 3 Multiversal Equality 校验规则差异原因
核心原因是Scala 3对Multiversal Equality的实现做了分层设计,默认状态下就会拦截明确无意义的跨类型比较,无需开启严格模式:
- 基础类型跨类比较默认强校验:Int和String分别属于Scala标准库的数值类型、字符串类型,二者不存在任何继承关系,也没有合法的相等比较场景,100%属于代码笔误。Scala 3默认就会禁止这类标准库无关类型的相等比较,不需要导入
scala.language.strictEquality,这也是和Scala 2默认宽松校验的核心差异之一。 - 自定义样例类默认宽松兼容:为了兼容Scala 2的代码行为,所有用户自定义类型默认会被赋予通用相等性权限,两个无关联的自定义样例类做相等比较时,默认可以编译通过,运行时返回false。只有当你手动导入
scala.language.strictEquality后,编译器才会启用全量的Eql类型类校验,要求参与比较的两个类型必须显式声明可以互相比较,否则就会触发编译报错。
内容的提问来源于stack exchange,提问作者Remis Haroon - رامز
相关产品推荐
相关产品推荐

