Scala 可变参数函数的灵活调用

在Scala编程中,若函数的参数是可变的,则会被写成String* 的形式,例如在调用Spark的DataFrame 函数 groupBy时的情形:

groupBy 函数原型为:

def groupBy(cols: Column*)
那么在日常调用时可以按照传统的可变参数函数调用方式,写成如下形式:

dfRet.groupBy(dfRet("`年龄分段_2`"),dfRet("`性别_2`"))
这种方式是可以满足日常使用的,特别是应用程序中对col的数量清晰知道的情况下,那么对于应用程序无法预知参数个数的情况,要怎么处理呢?


首先groupBy的参数是可变的,而应用程序又无法确认API调用层传参的具体个数,所以不能按照传统方式调用。然而Scala是一门FP时语言,这样就给我们提供了一个便利的方式来解决这个应用端参数个数未知的应用场景。


首先可以将参数转换成Seq中的元素,例如:

val arr = Seq(dfRet("`年龄分段_2`"),dfRet("`性别_2`"))
然后调用的时候才有如下方式即可:

dfRet.groupBy(arr:_*)
这样的调用方式,即将arr 中的所有元素依次传递到groupBy 函数中。

通过上述方法可以发现,在应用程序参数个数未知的情况下,可以先将参数组装成Seq,然后再调用可变参数函数即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值