Function2的隐式值与隐式[Function2]不同

时间:2017-07-06 23:11:29

标签: scala

我有以下两个测试用例:

测试案例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:

  @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的哈希码与TEST CASE 1中的func和x不同

1 个答案:

答案 0 :(得分:1)

implicitly定义为:

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

您在测试用例1中所做的是显式地将参数e的值(不是类型)传递为((p: Person) => Int),这是一个以Person为参数并返回对象的函数{ {1}}。然后Int只会将相同的值返回给您。

你想要的是:

implicitly

这将导致scala编译器使用隐式值val y = implicitly[Person => Int] 填充参数值e。