拓哥的代碼發現不少地方都用到了:_*,今天探個究竟。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函數