柚子快報激活碼778899分享:開發(fā)語言 Scala學習(四)
柚子快報激活碼778899分享:開發(fā)語言 Scala學習(四)
文章目錄
1.閉包2.函數(shù)式編程遞歸和尾遞歸2.1遞歸2.2 尾遞歸
3.控制抽象3.1 值調(diào)用3.2 名調(diào)用
4.惰性函數(shù)
1.閉包
如果一個函數(shù),訪問到了它的外部(局部)變量的值,那么這個函數(shù)和它所處的環(huán)境稱之為閉包
//閉包練習
def sumX(x:Int)={
def sumY(y:Int):Int={
x+y
}
sumY _
}
val xResult = sumX(5)
val result = xResult(6)
println(result)
2.函數(shù)式編程遞歸和尾遞歸
2.1遞歸
嵌套調(diào)用自身的函數(shù) 必須要有停止的條件 遞歸調(diào)用的參數(shù)必須有規(guī)律 結(jié)果值的類型不能省略
//使用遞歸實現(xiàn)階乘
def func_count(n:Int):Long={
if(n==1)
{
1L
}
else
{
func_count(n-1)*n
}
}
println(func_count(6))
2.2 尾遞歸
尾遞歸,顧名思義,即最后遞歸調(diào)用函數(shù)的一行,只有自身的函數(shù)沒有其他的值。
//使用尾遞歸對階乘進行優(yōu)化
def lastRecursion(n:Int,res:Long=1):Long={
if(n==1)
{
res
}
else
{
lastRecursion(n-1,res*n)
}
}
val result = lastRecursion(5)
println(result)
3.控制抽象
控制抽象分為值調(diào)用和名調(diào)用
3.1 值調(diào)用
值調(diào)用就是將代碼塊的結(jié)果作為參數(shù)傳入到函數(shù)當中
//控制抽象
def sayHi(name:String)={
println("函數(shù)調(diào)用")
println(s"hi $name")
println(s"hi $name")
}
sayHi({
println("我是代碼塊")
"mao"
})
3.2 名調(diào)用
名調(diào)用不是將代碼塊的結(jié)果作為參數(shù)傳入函數(shù)中,直接將整個代碼塊傳入到參數(shù)中,使用一次代碼塊就會運行一次。
def sayHi(name: =>String)={
println("函數(shù)調(diào)用")
println(s"hi $name")
println(s"hi $name")
}
sayHi({
println("我是代碼塊")
"mao"
})
4.惰性函數(shù)
惰性函數(shù),當函數(shù)的返回值被聲明為lazy的時候,函數(shù)的執(zhí)行將被推遲到我們首次對此取值,該函數(shù)才會執(zhí)行,這種函數(shù)我們稱為惰性函數(shù) 案例實操:
//正常函數(shù)執(zhí)行
//實現(xiàn)懶加載
def sumXY(x: Int, y: Int): Int = {
println("sum函數(shù)調(diào)用")
x + y
}
val sum: Int = sumXY(5, 6)
println("其他代碼")
println(sum)
運行結(jié)果: 使用惰性函數(shù)運行上述代碼,不會在調(diào)用函數(shù)的時候就執(zhí)行,而是等到調(diào)用返回值的時候再進行計算
lazy val sum: Int = sumXY(5,6)
println("其他代碼")
println(sum)
柚子快報激活碼778899分享:開發(fā)語言 Scala學習(四)
相關(guān)鏈接
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。