当我声明class Pair[T : Ordering]
时,它要求隐含值Ordering[T]
。在下面的示例中,我试图找出Ordering[Int]
的隐含值来自何处。
看起来scala.math.Ordering.Int
应该是隐含值,但是它还没有被导入,所以从哪里得到隐含值?
class Pair[T : Ordering](val first: T, val second: T) {
def smaller(implicit ord: Ordering[T]) =
if(ord.compare(first, second) < 0) first else second
}
object Run extends App {
val p = new Pair[Int](2, 3)
}
答案 0 :(得分:4)
T 类型的隐式作用域包含所有随播模块 (§5.4)与隐式参数相关联的类 类型。
页面的下一个四分之一定义了与相关联的含义,但唯一对您的问题重要的部分是Ordering
与Ordering[Int]
相关联,因此编译器会在the companion object中查找Ordering
,当然还有Int
。
答案 1 :(得分:0)
我想这是因为Int隐含地使用Ordered trait:
http://docs.scala-lang.org/sips/pending/implicit-classes.html