为什么类型注释在 Scala 中会针对一个 val 发生变化

Why the type annotation is changing in Scala for one val

为什么我在以下这些情况下会得到这种类型注释差异。 对于场景 1

case class TestData(name : String , idNumber : Int)
val createRandomData : immutable.IndexedSeq[Int => TestData]= (0 to 2).map{
    _ => TestData("something",_)
  }

对于场景 2

case class TestData(name : String , idNumber : Int)
val createRandomData: immutable.Seq[TestData] = (0 to 2).map{
    i => TestData("something",i)
  }

为什么在场景 1 中 return type 是一个函数而不是 Seq 的集合。

因为 TestData("something",i) 的类型为 TestDataTestData("something",_) 的类型为 Int => TestData.

第二个下划线用于 lambda(而第一个下划线表示参数无关紧要)。

What are all the uses of an underscore in Scala?

当你做这样的事情时:

    case class TestData(name : String , idNumber : Int)
    val createRandomData : immutable.IndexedSeq[Int => TestData]= (0 to 2).map{
        _ => TestData("something",_)
    }

第一个下划线表示您忽略参数的值,然后在传递给 map 的函数主体中使用另一个下划线,因此您创建了一个以 return 类型结尾的 lambda 函数.

您在第一个场景中想要的是:

case class TestData(name : String , idNumber : Int)
val createRandomData = (0 to 2).map{
  TestData("something",_)
}

其中 TestData 为 return 类型。