Scala基礎(chǔ)篇-函數(shù)

1.普通函數(shù),scala函數(shù)不明顯使用return返回值,如果有返回值,最后一行就是返回值

1.1定義返回值為Int的函數(shù)

def fun(x:Int,y:Int) : Int = {

? ? x+y//返回x+y的結(jié)果

}

等價函數(shù):

def fun(x:Int,y:Int) = {//不寫返回值類型scala會自動匹配最后一行的輸出結(jié)果類型作為返回值類型

? ? x+y//返回x+y的結(jié)果

}


1.2無返回值函數(shù)

//如果沒有返回值可以省略冒號、返回值類型、等號;定義沒有返回值的函數(shù)(返回值為Unit)

def fun(x:String,y:String){

? ? println(x + "-" + y)

}

相當于?

def fun(x:Int,y:Int) : Unit={

? ? println(x + "-" + y)

}


1.3定義帶有初始值參數(shù)的函數(shù)

def fun(x:Int=10) = {

? ? x + 5

}

注意:調(diào)用有參數(shù)的函數(shù)必須在函數(shù)名后加()

調(diào)用帶有初始值參數(shù)的函數(shù),傳入的參數(shù)會覆蓋參數(shù)初始值

2.值函數(shù)

說明:函數(shù)體賦給一個變量,調(diào)用的時候直接使用變量的名稱

val valueFunction = (x:Int)=>x+1

調(diào)用:valueFunction(20)

相當于如下函數(shù)的定義:

def valueFunction(x:Int) : Int = x+1

多個語句的值函數(shù)

dec valueMultiFunction(x:Int) {

? ? var b = x+2

? ? println("b" + b)

}

3.匿名函數(shù)

val str1 = Array(1,2,3,4).map((x:Int)=>x+1).mkString(",")

//參數(shù)類型推倒

val str2 = Array(1,2,3,4).map((x)=>x+1).mkString(",")

//函數(shù)只有一個參數(shù)的話,可以省略()

val str3 = Array(1,2,3,4).map(x=>x+1).mkString(",")

////如果參數(shù)右邊只出現(xiàn)一次,則可以進一步簡化

val str4 = Array(1,2,3,4).map(_+1).mkString(",")

4.高階函數(shù)

4.1函數(shù)參數(shù)

= 左邊定義函數(shù)的參數(shù) ,規(guī)定傳入的“函數(shù)”參數(shù)類型,= 右邊調(diào)用傳入的“函數(shù)”并給一個參數(shù)值,這個參數(shù)值的類型就是定義的傳入“函數(shù)”參數(shù)的“參數(shù)”類型如f:(Int)為Int型(太繞嘴了)

定義:def paramFunction(f:(Int)=>String)=f(10)

說明:f:(Int)=>String定義傳入的“函數(shù)”參數(shù),這個函數(shù)的輸入?yún)?shù)為Int型,返回值為String類型

調(diào)用:paramFunction((x:Int)=>"Hello " + x)

4.2調(diào)用函數(shù)產(chǎn)生一個新的函數(shù)(函數(shù)返回值為函數(shù))

定義:def productNewFunction(y:Int)=(x:Int)=>x * y

說明:(大白話表達)相當于一個函數(shù)里定義了一個匿名函數(shù),把最外層函數(shù)的參數(shù)賦給函數(shù)體內(nèi)的匿名函數(shù),匿名函數(shù)有自己的參數(shù),當調(diào)用外層函數(shù)的時候返回一個中間函數(shù),當再次調(diào)用中間函數(shù)的時候才會返回數(shù)據(jù)結(jié)果。

演示:

5.函數(shù)閉包

定義:

var freeParam=10

def closeFun(x:Int)=x + freeParam

說明:

x:綁定變量,x的類型在定義函數(shù)的時候就已經(jīng)定義好了,x的值在函數(shù)調(diào)用的時候確定

freeParam:自由變量,在定義函數(shù)之前類型不固定,freeParam值可以不斷的變化,freeParam值影響到整個函數(shù)的結(jié)果。注意:freeParam變量必須在閉包函數(shù)定義之前定義,否則報錯

調(diào)用:

關(guān)于閉包(大白話):freeParam變量的類型和值在運行的時候確定,而且freeParam的值可以不斷的變化并且影響整個函數(shù)的結(jié)果,這種由自由式變?yōu)榉忾]式的過程就是閉包

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容