2

パッケージにEqualオブジェクトがあります:scalaz

package scalaz

object Equal extends EqualLow {

  // ...

  implicit def Tuple3Equal[A: Equal, B: Equal, C: Equal]: Equal[(A, B, C)] = equal {
    case ((a1, b1, c1), (a2, b2, c2)) => a1 ≟ a2 && b1 ≟ b2 && c1 ≟ c2
  }

  //...
}

コンパイラが知っている可能性があるimplicit def Tuple3Equal方法、私が呼び出すとそのメソッドが呼び出されます:

import scalaz._
import Scalaz._

implicitly[Equal[Tuple3[Int,Int,Int]]]
//or
(1,2,3).=== (1,2,3)

scalaz._パッケージとオブジェクトのみをScalaz._インポートしており、暗黙を含む明示的なインポートscalaz.Equal._がないことに注意してください。

4

1 に答える 1

4

タイプの暗黙を探すときFoo、のコンパニオンオブジェクトFooが常にチェックされるためです。暗黙の解決の完全な説明については、この回答を参照してください。

于 2012-11-18T14:20:53.557 に答える