Scala 可变参数函数的灵活调用
2017-11-23 16:40
232 查看
在Scala编程中,若函数的参数是可变的,则会被写成String* 的形式,例如在调用Spark的DataFrame 函数 groupBy时的情形:
groupBy 函数原型为:
首先groupBy的参数是可变的,而应用程序又无法确认API调用层传参的具体个数,所以不能按照传统方式调用。然而Scala是一门FP时语言,这样就给我们提供了一个便利的方式来解决这个应用端参数个数未知的应用场景。
首先可以将参数转换成Seq中的元素,例如:
通过上述方法可以发现,在应用程序参数个数未知的情况下,可以先将参数组装成Seq,然后再调用可变参数函数即可。
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,然后再调用可变参数函数即可。
相关文章推荐
- Scala从零开始:函数参数的传名调用(call-by-name)和传值调用(call-by-value)
- JavaScript创建一个add()函数可实现,可变参数和递归调用
- python可变参数调用函数问题
- 在调用支持可变参数格式化的函数时的一个很掩蔽问题
- 动态的调用可变参数函数
- Scala函数使用可变参数
- 可变参数模拟printf()函数实现一个my_print()函数以及调用可变参数需注意的陷阱
- scala:函数参数的传名调用(call-by-name)和传值调用(call-by-value)
- PHP中函数参数的调用及其灵活使用方法
- C/C++中可变参数的原理 与函数调用约定
- 通过Java发射机制调用可变参数函数
- C#关于静态函数与普通函数之间的调用问题,以及可变参数的使用
- 动态的调用可变参数函数
- JavaScript Arguments 实现可变参数的函数,以及函数的递归调用
- 如何在一个可变参数函数中调用另一个可变参数函数
- Swift如何调用Objective-C的可变参数函数详解
- python中函数参数,函数调用参数传递,可变参数,*expression,**expression
- 可变参数列表的函数调用 va_list va_start va_arg va_end
- C系列总结3 & 剖析函数调用及可变参数--详解栈帧
- Scala 学习笔记(三)------定义具有可变参数的函数