在Scala3中,有没有办法在一个区域中禁用-language:strictEquality(多元平等)?
想要这样做的特殊原因是仍然能够对来自超类的值使用模式匹配。例如,我希望case None在查看 type 的值时能够匹配Option[Throwable],但这似乎不可能,因为Throwable不可能,而且(我想)永远不会有CanEqual实例。
回答
尝试像这样限制给定的范围
val x: Option[Throwable] = None
{
given CanEqual[Option[Throwable], Option[Throwable]] = CanEqual.derived
x match {
case Some(v) => v
case None => new Throwable()
}
} // after this brace CanEqual given is out-of-scope
x match {
case Some(v) => v
case None => new Throwable()
} // compile-time error: Values of types object None and Option[Throwable] cannot be compared with == or !=
THE END
二维码