【发布时间】:2018-05-30 15:29:04
【问题描述】:
我想在其类型参数中使以下 trait 逆变。
trait Preferences[-A] {
def ordering: Ordering[A]
}
上述解决方案的问题在于,在 Scala 标准库中,Ordering 的类型参数是不变的。这个SO 帖子讨论了为什么会这样。
我已经为我的问题制定了两种解决方案。第一种解决方案是使参数A和上限。
trait Preferences[-A] {
def ordering[B <: A]: Ordering[B]
}
第二种是使用implicit。
trait Preferences[-A] {
def ordering(implicit ev: B <:< A): Ordering[B]
}
这两个都可以编译,但我不明白其中的取舍。这些方法之一是否更通用?我应该使用第三种方法吗?
【问题讨论】:
标签: scala contravariance