【发布时间】:2013-03-16 03:01:48
【问题描述】:
知道DistTraversableLike 在其两个类型参数中都是协变的,我想使以下特征协变:
trait TraversableNumOps[T, Repr] extends DistTraversableLike[T, Repr] {
private def min(a: T, b: T)(implicit num: Numeric[T]) =
if (num.compare(a, b) <= 0) a else b
private def max(a: T, b: T)(implicit num: Numeric[T]) =
if (num.compare(a, b) > 0) a else b
def maxD(implicit num: Numeric[T]): Option[T] =
reduceD((a, b) => if (a >= b) a else b)
def minD(implicit num: Numeric[T]): Option[T] =
reduceD((a, b) => if (a < b) a else b)
def sumD(implicit num: Numeric[T]): Option[T] =
reduceD(_ + _)
def productD(implicit num: Numeric[T]): Option[T] =
reduceD(_ * _)
}
但是,我无法在不破坏它的情况下管理它。问题是我想支持在 T 中不是协变的Numeric[T]。
如何修改此特征以在 T 和 Repr 中成为协变?
【问题讨论】:
标签: scala generics covariance typeclass