为什么类型注释在 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)
的类型为 TestData
而 TestData("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 类型。
为什么我在以下这些情况下会得到这种类型注释差异。 对于场景 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)
的类型为 TestData
而 TestData("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 类型。