一步一步理解Scala高阶函数:
第一步:
Scala函数可以作为值,传递给另外一个变量,或者另外一个函数
语法特征: 必须要在函数后面加上空格和下划线
object FunctionOps1 {
def main(args: Array[String]): Unit = {
//作为值得函数
val sayBye = sayGoodBye _ //函数传递给变量空格和下划线
def say = sayGoodBye _ //函数传递给函数空格和下划线
sayGoodBye("zhangsan")
sayBye("KPWong")
say("laoli")
}
/**
* 函数可以作为值,传递给另外一个变量,或者另外一个函数
* 语法特征: 必须要在函数后面加上空格和下划线
*/
def sayGoodBye(name:String) : Unit = {
println("Good bye to " + name)
}
}
第二步:匿名函数:
匿名函数:就是没有名字的函数
Scala 中定义一个完整函数:
def functionName(Params):returnType = {body}
Scala中定义匿名函数:
(Params) => returnType //匿名函数定义
(Params) => {body} //匿名函数实现
问题:
该匿名函数如何被调用
解决方案:
将匿名函数赋值给一个变量或者函数
val sayAnonymousVal = (name:String) => { println("Good bye to " + name) } //匿名函数赋值给变量
def sayAnonymousFun = (name:String) => { println("Good bye to " + name) } //匿名函数赋值给函数
object FunctionOps1 {
def main(args: Array[String]): Unit = {
//作为值得函数
val sayBye = sayGoodBye _ //函数传递给变量
def say = sayGoodBye _ //函数传递给函数
sayGoodBye("zhangsan")
sayBye("KPWong")
say("laoli")
sayAnonymousVal("laozhao")
sayAnonymousFun("lao Fang")
}
/**
* 函数可以作为值,传递给另外一个变量,或者另外一个函数
* 语法特征: 必须要在函数后面加上空格或者下划线
*/
def sayGoodBye(name:String) : Unit = {
println("Good bye to " + name)
}
//匿名函数:就是没有名字的函数
/**
* Scala 中定义一个完整函数:
* def functionName(Params):returnType = {body}
* Scala中定义匿名函数:
* (Params) => returnType //匿名函数定义
* (Params) => {body} //匿名函数实现
* 问题:
* 该匿名函数如何被调用
* 解决方案:
* 将匿名函数赋值给一个变量或者函数
*/
val sayAnonymousVal = (name:String) => { println("Good bye to " + name) } //匿名函数赋值给变量
def sayAnonymousFun = (name:String) => { println("Good bye to " + name) } //匿名函数赋值给函数
// def sayGoodBye(name:String) : Unit = {
// println("Good bye to " + name)
// }
}
第三步: 高阶函数:带函数参数的函数,一个函数的参数是函数,这种函数称为高阶函数
def HigheLevelFunction(name:String,func:(String) => Unit) :Unit = {
func(name)
}
使用高阶函数:
HigheLevelFunction("LaoGao1",sayAnonymousVal)
HigheLevelFunction("LaoGao2",(name:String) =>sayAnonymousVal(name))
HigheLevelFunction("LaoGao3",(name:String) =>sayGoodBye(name))
HigheLevelFunction("LaoGaoAnonymous1",(name:String) =>{println(name)}) //更多情况下使用这一的匿名函数
//如果只有一个参数,可以省略掉()
HigheLevelFunction("LaoGaoAnonymous2",name=>println(name)) //更多情况下使用这一的匿名函数
//可以用通配符"_" 代替一个变量
HigheLevelFunction("LaoGaoAnonymous3",{println(_)})
//最简单的写法,通配符都可以省略
HigheLevelFunction("LaoGaoAnonymous4",println)