Scala 高階函式
阿新 • • 發佈:2020-12-17
一步一步理解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)