函數(shù)參數(shù)
1.可變參數(shù)(多個(gè)參數(shù)時(shí)敦第,可變參數(shù)一般放置在最后)
def demo(name : String, girlFriend : String*) : Int = 1
2.參數(shù)默認(rèn)值,一般有默認(rèn)值的參數(shù)放在后面
def demo(name : String, girlFriendSize : Int = 5) : Int = 1
3.帶名參數(shù)
def demo(name : String,age : Int) : Int = 1
demo(name = "cbd" , age = 18)
至簡(jiǎn)原則
1.return省略,函數(shù)體最后一行作為返回值
2.函數(shù)體只有一行代碼,可以省略花括號(hào)
3.返回值類(lèi)型如果能夠推斷出來(lái)玷禽,[:返回值]可以省略
def gnmyd = {
"給nm一刀"
}
4.如果有return,則不能省略返回值類(lèi)型
def gnmyd = {
//編譯異常
return "給nm一刀"
}
5.如果函數(shù)明確聲明Unit返回值呀打,那即使函數(shù)使用return關(guān)鍵字也不起作用
6.Scala如果期望是無(wú)返回值類(lèi)型矢赁,可以省略等號(hào)和[:返回值]
7.如果函數(shù)無(wú)參,但是聲明了參數(shù)列表贬丛,那么調(diào)用時(shí)撩银,小括號(hào),可加可不加
8.如果函數(shù)沒(méi)有參數(shù)列表豺憔,那么小括號(hào)可以省略额获,調(diào)用時(shí)小括號(hào)必須省略
9.如果不關(guān)心名稱(chēng),只關(guān)心邏輯處理焕阿,那么函數(shù)名( def)可以省略
def ex1(funcName:Int => Unit): Unit ={
ex2(1)
}
def ex2(id:Int):Unit = {
println("上去就是一刀")
}
高階函數(shù)
1.函數(shù)可作為值傳遞
val ls:(Int, Int) => Int = abab
val la = abab _
2.函數(shù)可以作為參數(shù)進(jìn)行傳遞
def 小野六花(xylh : (Int,Int) => Int): Unit ={
}
注:定義一個(gè)函數(shù),函數(shù)參數(shù)是一個(gè)函數(shù)簽名
3.函數(shù)可以作為函數(shù)返回值返回
def 小野六花() ={
def 三上悠亞():Unit = {
println("深田永美")
}
}
小野六花()()
匿名函數(shù)
沒(méi)有名字的函數(shù)就是匿名函數(shù)首启,形如(x:Int)=>{//do}
匿名函數(shù)至簡(jiǎn)原則
1)參數(shù)類(lèi)型可以省略暮屡,會(huì)根據(jù)形參自動(dòng)推導(dǎo)
2)類(lèi)型省略后,如果只有一個(gè)參數(shù)毅桃,小括號(hào)可以省略
3)匿名函數(shù)只有一行褒纲,大括號(hào)也可以省略
4)如果參數(shù)只出現(xiàn)一次,則參數(shù)省略且后面參數(shù)可以用_代替
def a(l:(Int,String)=>String): Unit ={
println(l(1,"a"))
}
def b(l:Int=>Unit):Unit = {
l(1)
}
this.a((_,_)=>{"aaa"})
this.b(_=>println("bbb"))
函數(shù)柯里化(Haskell Curry)&閉包&惰性加載
1.閉包是函數(shù)式編程的標(biāo)配
2.scala遞歸必須聲明函數(shù)返回值類(lèi)型
3.函數(shù)返回值被聲明為lazy時(shí)钥飞,函數(shù)的執(zhí)行將被推遲莺掠,知道我們首次對(duì)此取值,該函數(shù)才會(huì)執(zhí)行
4.lazy不能修飾var