相比java,scala的函数定义时可以设置参数的默认值。但在scala调用java方法时不可用,要遵循java语法。
需要在参数列表的参数声明后面加个=默认值
即可,如下图,tableName和etl_date的默认值分别为test和1225
//ss:SparkSession,sc:SparkContext,rdd:RDD[String],
private def doGen(tableName: String = "test", resultDir: String, etl_date: String = "1225") = {
}
在调用时,如果有默认值的参数只有一个且为最后一个,可以通过加或不加来区分。
如果在中间,需要通过形参名 = 实际变量或字面量
的方式来表达某个参数没有赋值。如下:
没有指定tableName,则tableName会使用默认值
doGen(resultDir = rD, etl_date = ed)
注意使用命名参数时,顺序是可以重新排列的。 但是,如果某些参数被命名了,而其他参数没有,则未命名的参数要放在命名参数的前面 并且 按照其方法签名中的参数顺序。如下是错误示范
:
printName(last = "Smith", "john") // error: positional after named argument