语境困惑

时间:2013-10-23 23:48:21

标签: scala

当我声明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)
}   

2 个答案:

答案 0 :(得分:4)

来自the language specification

  

T 类型的隐式作用域包含所有随播模块   (§5.4)与隐式参数相关联的类   类型。

页面的下一个四分之一定义了相关联的含义,但唯一对您的问题重要的部分是OrderingOrdering[Int]相关联,因此编译器会在the companion object中查找Ordering,当然还有Int

答案 1 :(得分:0)

我想这是因为Int隐含地使用Ordered trait:

http://docs.scala-lang.org/sips/pending/implicit-classes.html