zoukankan      html  css  js  c++  java
  • Scala中_*的应用

    拓哥的代码发现很多地方都用到了:_*,今天探个究竟。

    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

    但是如果使用这种方式就会报错

    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转化为参数序列

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

    例如,下面代码分别将arr中的第一个和第二个值赋给first和second

    scala> val arr = Array(1,2,3,4,5)
    arr: Array[Int] = Array(1, 2, 3, 4, 5)

    scala> val Array(1, 2, _*) = arr

    scala> val Array(first, second, _*) = arr
    first: Int = 1
    second: Int = 2

    项目中的代码

    addColumns.foreach(column => {

      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函数
  • 相关阅读:
    2-5
    2-4 及 1、2两章 学习心得 和问题
    2-3
    4-8
    4-6
    4-5
    4-4
    4-3
    4-2
    4-1
  • 原文地址:https://www.cnblogs.com/muliti-hu/p/11280873.html
Copyright © 2011-2022 走看看