0

为什么我在以下这些场景中得到这种类型的注释差异。对于方案 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 中返回类型是一个函数而不是 Seq 的集合。

4

2 回答 2

3

因为TestData("something",i)has typeTestDataTestData("something",_)has type Int => TestData

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

Scala中下划线的所有用途是什么?

于 2019-04-25T14:14:41.513 回答
3

当你做这样的事情时:

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

第一个下划线意味着您忽略参数的值,然后在传递给 map 的函数体中使用另一个下划线,因此您正在创建一个以返回类型结尾的 lambda 函数。

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

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

其中有 TestData 作为返回类型。

于 2019-04-25T16:00:37.570 回答