以下功能
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,它们支持>.
写这样一个函数的推荐灵魂是什么?
谢谢
您可以Ordering像这样使用类型类:
def compare[T](o1: T, o2: T)(implicit ord: Ordering[T]) = ord.gt(o1, o2)
Run Code Online (Sandbox Code Playgroud)
如果你想使用>运算符,你可以使用视图绑定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)