引言
Scala 不仅是
完全面向对象语言
,而且还是完全面向函数编程
语言,所以 Scala 叫做多范式
编程语言,Scala 的函数非常强大
- 函数可以作为函数的返回值
- 函数可以作为函数的参数
- 函数可以赋值给变量
函数作为返回值
函数作为返回值,需要注意 _ (下换线)的用法
把 返回值函数 写在外边
// 定义一个函数,作为返回值 def fun(name: String): Unit = { println(s"fun_name = $name ") } // 定义执行函数 def fun1(name: String) = { // 加个 _(下划线)表名该函数是返回值 println(s"fun1_name = $name ") fun _ } // 执行函数,返回值函数不会被执行 fun1("Bob") ------------------------- fun1_name = Bob // 执行返回值函数 fun1("Bob")("bigdataboy") ------------------------- fun1_name = Bob fun_name = bigdataboy
把返回值函数 写在内部
函数执行结果与上面一样,只是这样写跟容易理解
def fun1(name: String) = { // 返回值函数 def fun(name: String): Unit = { println(s"fun_name = $name ") } println(s"fun1_name = $name ") fun _ }
函数柯里化
就是把上面的格式进行简化,通过函数调用就可以看出来
所以 Scala 里就会看到
()()()()()()
这样的调用
def fun(name: String)(name1: String): Unit = { println(s"name = $name") println(s"name1 = $name1") } fun("Bob")("Bbigdataboy") ---------------------------------------------- fun1_name = Bob fun_name = bigdataboy
函数作为参数
把函数作为参数,不同点在于
规定参数类型
时的写法不一样
def fun(f: String=> Unit): Unit = { f() } // 定义参数类型解析 f: String=> Unit 参数名称: 传入函数的参数类型 => 传入函数的返回值类型
小例子
自定义传入一段逻辑(函数)给函数
def fun(f: Int=> Int,num: Int): Unit ={ // 执行传入的函数(有参数也需要传参数) println(f(num)) }
参数函数
// 把传入的参数 不做任何处理 直接返回 def fn(n: Int): Int = { n }
执行函数
fun(fn,5) --------- 5
传入匿名函数(作为参数)
这也是 Spark 用的最多的,匿名函数可以看看这个
// 定义一个函数 def fun(f: ()=> Unit): Unit = { f() }
执行函数(传入匿名函数)
fun(()=> {println("Hello bigdataboy")}) --------------------------------------- Hello bigdataboy
函数赋值给变量
变量可以接受一个匿名函数
val add= (a: Int,b: Int) => a + b // 调用 println(add(12,34)) --------------------------------- 46
版权声明:《 Scala 函数之高阶用法(炼狱级) 》为明妃原创文章,转载请注明出处!
最后编辑:2020-2-1 07:02:19