拓哥的代码发现不少地方都用到了:_*,今天探个究竟。express
1.变长参数
例如定义一个变长参数的方法sum,而后计算1-5的和,能够写为函数
可是若是使用这种方式就会报错ui
这种状况必须在后面写上: _*将1 to 5转化为参数序列spa
例如,下面代码分别将arr中的第一个和第二个值赋给first和secondscala
scala> val arr = Array(1,2,3,4,5)
arr: Array[Int] = Array(1, 2, 3, 4, 5)code
scala> val Array(1, 2, _*) = arrinput
scala> val Array(first, second, _*) = arr
first: Int = 1
second: Int = 2it
项目中的代码io
addColumns.foreach(column => {console
if (column.udf != null && column.inputColumns != null) {
result = result.withColumn(column.name, column.udf(column.inputColumns.map(col): _*))
} else if (column.expression != null) {
result = result.withColumn(column.name, expr(column.expression))
}
}
)
inputColumns是一个List,
inputColumns.map(col):_*展平成为一个序列参数传递给udf函数