【发布时间】:2022-12-11 08:49:58
【问题描述】:
在 Scala 3 中,使用 -language:strictEquality,此代码:
trait X[A]:
def val1: A
def val2: A
def f() =
if val1 == val2 then
println("Same")
产生此错误:
Values of types A and A cannot be compared with == or !=
我寻找一些特征来告诉编译器 A 可以与自身进行比较,但找不到。我找到的解决方案是添加这一行:
given CanEqual[A, A] = CanEqual.derived
但是,我还有几个问题:
- 为什么不能比较同一类型的两个实例?有哪些
A的实例,其中val1 == val2是不合法的? - 是否有将
==、!=添加到类型的特征? - 如果当
A是类型参数时编译器无法确定您可以将A与A进行比较,那么given CanEqual[A, A] = CanEqual.derived是如何让它开心的?CanEqual.derived有什么神奇之处,为什么在使用==时不能默认应用?
【问题讨论】: