我需要一个方法来返回两个有序值中的第一个.我试过了:
def first[T <: Ordered[T]](a: T,b: T) = { a compare b match { case -1 | 0 => a case 1 => b } }
但得到
scala> first(3,4) <console>:9: error: inferred type arguments [Int] do not conform to method first's type parameter bounds [T <: Ordered[T]] first(3,4) ^
我想这是因为Int需要转换为RichInt,它是Ordered [Int]而不是Ordered [RichInt].接下来是什么?
解决方法
您可以使用类型类Ordering和context bound:
def first[T : Ordering](a: T,b: T) = { implicitly[Ordering[T]].compare(a,b) match { case -1 | 0 => a case 1 => b } }
更新
如果导入scala.math.Ordered._,则可以进一步简化此代码. Companion object of Ordered
有orderedToOrdered隐式转换,因此具有Ordering的所有内容也将被视为Ordered:
import scala.math.Ordered._ def first[T : Ordering](a: T,b: T) = if (a <= b) a else b
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。