【发布时间】:2010-12-06 08:49:54
【问题描述】:
在 Scala 中,我们可以使用 隐式类型类 有条件地将方法添加到依赖于该类型参数的参数化类型。例如Iterator.sum:
def sum[B >: A](implicit num: Numeric[B]): B = foldLeft(num.zero)(num.plus)
必须有一个 Numeric 类型类的实例才能调用此方法:
scala> List(1, 2, 3).sum
res0: Int = 6
scala> List("a", "b").sum
<console>:6: error: could not find implicit value for parameter num: Numeric[java.lang.String]
List("a", "b").sum
^
到目前为止,一切都很好。假设我想要一些集合类型,My2Col:
class My2Col[A](a1 : A, a2 : A)
但我想强制要求,如果这是使用A : Numeric,那么 a2 > a1。但是,完全有效它可以使用不是数字的A。
My2Col("a", "b") //OK
My2Col("b", "a") //OK
My2Col(1, 2) //OK
My2Col(2, 1) //THROW IllegalArgumentException
有没有人知道我可以如何做到这一点?
PS。如果有人对更好的问题标题有任何建议,我会全力以赴
【问题讨论】: