如何编写scala中任意数字(Ordering [_])的通用方法?

时间:2015-10-11 20:07:36

标签: scala generics

我试图实现一个可以应用于任何数字的简单方法:

/**
 * Round `candidate` to the nearest `bucket` value.
 */
def bucketise[Ordering[A]](buckets: Seq[Ordering[A]], 
    candidate: Ordering[A]): Ordering[A] = ???

我完全不想参数化,因为我的方法会使用<和>比较。我认为这意味着我应该限制为任何Ordering[_]类型,但我似乎无法指定。

调用上述内容(或我将A替换为_的变体)给出了以下错误:

error: type mismatch;
 found   : Int(3)
 required: Ordering[_]
       NumberUtils.bucketise(List(1,2,3), 3)

我尝试实现的目标的正确语法是什么?

1 个答案:

答案 0 :(得分:4)

除非我误解,你想要的是:

def bucketise[A](buckets: Seq[A], candidate: A)(implicit ev: Ordering[A]): A = ???

可以用加糖形式书写:

def bucketise[A : Ordering](buckets: Seq[A], candidate: A): A = ???