比较Scala中泛型函数中泛型类型的值

use*_*610 4 generics scala

以下功能

def compare[T] (o1:T, o2:T):Boolean = {
   o1 > o2
}
Run Code Online (Sandbox Code Playgroud)

不会编译,因为 value > is not a member of type parameter T

将参数定义为类型AnyVal也不起作用,编译器也会出现类似的错误.

但是,只能使用类型String和值来调用该函数Long,它们支持>.

写这样一个函数的推荐灵魂是什么?

谢谢

Jas*_*man 6

您可以Ordering像这样使用类型类:

def compare[T](o1: T, o2: T)(implicit ord: Ordering[T]) = ord.gt(o1, o2)
Run Code Online (Sandbox Code Playgroud)


Mur*_*fin 4

如果你想使用>运算符,你可以使用视图绑定Ordered[T]

def compare[T <% Ordered[T]] (o1:T, o2:T):Boolean = {
  o1 > o2
}
Run Code Online (Sandbox Code Playgroud)

scala 文档中有很好的例子。

http://docs.scala-lang.org/tutorials/FAQ/context-and-view-bounds.html

或者您可以使用隐式参数来执行此操作,因为现在不推荐使用视图边界:

def  compare[T](o1: T, o2: T)(implicit ev: T => Ordered[T]): Boolean = {
  o1 < o2
}
Run Code Online (Sandbox Code Playgroud)