【问题标题】:Why the type annotation is changing in Scala for one val为什么 Scala 中的类型注释会改变一个 val
【发布时间】:2019-04-25 14:06:27
【问题描述】:

为什么我在以下这些场景中得到这种类型注释差异。 对于场景 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 的集合。

【问题讨论】:

    标签: scala type-annotation


    【解决方案1】:

    当你做这样的事情时:

        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。

    【讨论】:

      【解决方案2】:

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

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

      What are all the uses of an underscore in Scala?

      【讨论】:

        猜你喜欢
        • 2013-04-25
        • 1970-01-01
        • 1970-01-01
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-13
        相关资源
        最近更新 更多