1

を宣言するとき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)
}   
4

2 に答える 2

4

言語仕様から:

T暗黙のスコープは、暗黙のパラメーターの型に関連付けられているクラスのすべてのコンパニオン モジュール (§5.4) で構成されます。

ページの次の 4 分の 1 では、ここでの関連付けの意味が定義されていますが、質問にとって重要なのはOrderingと関連付けられている部分のみOrdering[Int]であるため、コンパイラはコンパニオン オブジェクトで を検索しOrdering、確かに がありIntます。

于 2013-10-24T00:13:29.483 に答える
0

Int が暗黙的に Ordered トレイトで強化されているためだと思います。

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

于 2013-10-24T00:13:23.453 に答える