参数类型有" T =",其含义是什么

时间:2014-05-07 12:29:36

标签: scala

在spark JdbcRDD scala中,它具有以下代码。它有一个像

这样的参数
mapRow: (ResultSet) => T = JdbcRDD.resultSetToObjectArray _

该参数中“T =”的含义是什么?为什么不呢

mapRow: (ResultSet) => JdbcRDD.resultSetToObjectArray _

代码是:

class JdbcRDD[T: ClassTag](
    sc: SparkContext,
    getConnection: () => Connection,
    sql: String,
    lowerBound: Long,
    upperBound: Long,
    numPartitions: Int,
    mapRow: (ResultSet) => T = JdbcRDD.resultSetToObjectArray _)

object JdbcRDD {
  def resultSetToObjectArray(rs: ResultSet) = {
    Array.tabulate[Object](rs.getMetaData.getColumnCount)(i => rs.getObject(i + 1))
  }
}

1 个答案:

答案 0 :(得分:5)

整个(ResultSet) => T部分是参数的类型。这意味着mapRow参数是ResultSetT的函数。

在您的示例中,它是一个默认值的参数,类似于

def foo(justAnInt : Int = 4) = ???

是参数列表中=之后的部分。

所以,你得到parameterName : type = defaultVal,你可能会注意到,它是直接的:

mapRow : (ResultSet) => T = ...

简单来说,参数是从ResultSetT的函数,默认值为JdbcRDD.resultSetToObjectArray方法转换为函数(因此尾随下划线)。