我试图实现一个可以应用于任何数字的简单方法:
/**
* 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)
我尝试实现的目标的正确语法是什么?
答案 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 = ???