Почему аннотация типа изменяется в Scala для одного значения - PullRequest
0 голосов
/ 25 апреля 2019

Почему я получаю эту разницу в аннотациях типов в следующих сценариях.Для сценария 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 ]

3 голосов
/ 25 апреля 2019

Когда вы делаете что-то вроде этого:

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

первое подчеркивание означает, что вы игнорируете значение параметра, затем вы используете другое подчеркивание в теле функции, переданной в map, поэтому вы создаете лямбда-функцию, которая заканчивается типом возврата.

В первом сценарии вы хотели:

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

Который имеет TestData в качестве типа возврата.

3 голосов
/ 25 апреля 2019

Поскольку TestData("something",i) имеет тип TestData, а TestData("something",_) имеет тип Int => TestData.

Второе подчеркивание используется для лямбды (в то время как первое подчеркивание означает, что аргумент не имеет значения).

Для чего используется символ подчеркивания в Scala?

...