为什么类型注解在Scala中更改一个值

时间:2019-04-25 14:06:28

标签: scala type-annotation

为什么在以下这些情况下我得到这种类型注释的区别。 对于方案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的集合。

2 个答案:

答案 0 :(得分:3)

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

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

What are all the uses of an underscore in Scala?

答案 1 :(得分: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作为返回类型。