【发布时间】:2012-08-21 13:06:42
【问题描述】:
由于在 scala =:= 中有一个强制相等的广义类型约束,是否有一个强制类型“不等于”?基本上是!=,但对于类型?
编辑
下面的评论指向一个现有的Q&A,答案似乎是(1)不,它不在标准库中(2)是的,可以定义一个。
所以我会修改我的问题,因为我看到答案后的一个想法。
鉴于现有的解决方案:
sealed class =!=[A,B]
trait LowerPriorityImplicits {
implicit def equal[A]: =!=[A, A] = sys.error("should not be called")
}
object =!= extends LowerPriorityImplicits {
implicit def nequal[A,B](implicit same: A =:= B = null): =!=[A,B] =
if (same != null) sys.error("should not be called explicitly with same type")
else new =!=[A,B]
}
case class Foo[A,B](a: A, b: B)(implicit e: A =!= B)
如果A <: B 或A >: B,还会是A =!= B 的情况吗?如果不是,是否可以修改解决方案,使A =!= B 不是A <: B 或A >: B 的情况?
【问题讨论】:
-
SO 开发人员应该真正地 修复他们损坏的搜索,以便查找
=!=实际上会列出该问题。这个错误已经知道 4 年了。
标签: scala type-systems