2017-07-06 12 views
0

I持って次の2つのテストケース:暗黙値と同じではない暗黙[機能2]

TESTケース1:

@Test 
    def testImplicit1(): Unit = { 
    class Person(val age: Int) 
    val func: Person => Int = p => p.age 
    implicit val x = func 
    val y = implicitly((p: Person) => Int) 
    println(func.hashCode()) 
    println(x.hashCode()) 
    println(y.hashCode()) 
    } 

Xとfuncがつつ、同じハッシュコードを有しますyのハッシュコードは他の2つと異なります。

テストケース2:

@Test 
    def testImplicit2(): Unit = { 
    class Person(val age: Int) 
    implicit val p = new Person(10) 
    val p2 = implicitly[Person] 
    println(p.hashCode()) 
    println(p2.hashCode()) 

    } 

pとp2は同じハッシュコード

を持っているのyのハッシュコードは、テストケース1

答えて

1

implicitlyでFUNCとxのと異なり、なぜ私が尋ねる定義されています次のようになります。

def implicitly[T](implicit e: T): T = e 

あなたがテストケース1で行っていることは、引数eの値(型ではありません)をを引数とする関数である((p: Person) => Int)として渡し、オブジェクトIntを返します。その後、implicitlyは同じ値を返します。

何がしたいことはある:Scalaのコンパイラが暗黙の値xで引数の値eに記入するようになります

val y = implicitly[Person => Int] 

+0

あなたは正しいです。ありがとうございました! – Tom

関連する問題