Scala中_*的應用

拓哥的代碼發現不少地方都用到了:_*,今天探個究竟。express

1.變長參數 
例如定義一個變長參數的方法sum,而後計算1-5的和,能夠寫爲函數

  1.  
    scala> def sum(args: Int*) = {
  2.  
    | var result = 0
  3.  
    | for (arg <- args) result += arg
  4.  
    | result
  5.  
    | }
  6.  
    sum: (args: Int*)Int
  7.  
     
  8.  
    scala> val s = sum(1,2,3,4,5)
  9.  
    s: Int = 15

可是若是使用這種方式就會報錯ui

  1.  
    scala> val s = sum( 1 to 5)
  2.  
    <console>: 12: error: type mismatch;
  3.  
    found : scala.collection.immutable.Range.Inclusive
  4.  
    required: Int
  5.  
    val s = sum( 1 to 5)
  6.  
    ^

這種狀況必須在後面寫上: _*將1 to 5轉化爲參數序列spa

  1.  
    scala> val s = sum( to 5: _*)
  2.  
    s:  Int = 15
2.變量聲明中的模式 

例如,下面代碼分別將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函數
相關文章
相關標籤/搜索