1.在变量中存放函数
(1)定义函数fun1
(2)将函数赋给一个变量(注意函数名和下划线之间有空格)
(3)调用这个函数
2.匿名函数
匿名函数没有函数名,将函数赋给变量fun2。函数的参数是String类型,返回Unit类型
3.高阶函数
(1)函数的参数为函数的高阶函数
a)函数的第一个参数是func函数,func函数的输入参数类型为String,返回类型为Unit。第二个参数为String类型
b)调用bigData函数
(注)fun2函数(2.匿名函数中定义的函数)就是一个输入参数类型为String,返回类型为Unit的函数,符合(1)中的定义
(2)返回值为函数的高阶函数
定义一个输入参数content的类型为String类型的的函数func_Returned,func_Returned函数的返回值是输入参数message的类型为String类型的的函数。(message:String)=>println(content+" "+message)整体是一个匿名函数,所以func_Returned函数的返回值就是一个函数。
定义returned变量接收func_Returned函数的返回值函数。此时,func_Returned("Spark")的返回函数是(message:String)=>println(Spark+" "+message)
(3)高阶函数的类型推断
def spark(func:(content:String)=>Unit,name:String) {func(name)}
(注)因为func函数中只传入了一个参数,所以不需要再写content
(注)可简写为def spark(func:(String)=>Unit,name:String) {func(name)}
调用spark函数:
a)可简写为:spark(name=>println(name),"Scala") //高阶函数可进行类型推断,所以不需要再定义name为String类型。其次,对于只有一个参数的函数,可以略去参数外围的括号
b)可再简写为:spark(println_ ,"Scala") //如果在函数的参数的作用体内,只使用一次这个参数的具体的值,可以将参数具体的名称省掉,用下划线代替