Scala函數

一、函數的定義:

def sum(num:Int):Int = { 
    num + 1 
}

我們類比一下變量的定義,變量有類型和變量名。比如 var str:String = "func" ; 

str爲變量名,String爲他的類型,"func"爲他得值。類比到函數上就是這樣:

sum爲函數名,

Int => Int 就爲函數的類型,

(num:Int) => {num + 1} 就是函數的值。有沒有發現這其實是一個匿名函數? (注意這個值的前半部分要加括號括起來)

總感覺這樣說不太生動,還是舉例子吧:

val s = (num:Int) => num + 1
    
print(s(5))

因爲Scala有類型自動推斷,我們將函數的"值"賦給變量s 就會自動推斷爲一個類型爲 Int => Int 的函數,我們可以通過調用它來證明這個結論。

二、高階函數

有了上邊的推斷我們來看一下簡單的高階函數:

def aa(f:(Int,Int)=>Int,a:Int,b:Int):Int={
    return f(a,b)
  }

我們有這樣一個函數,他的參數類型爲((Int,Int)=>Int, Int, Int),返回值爲Int,也就是說它的參數有三個,一個函數類型的參數,兩個Int類型的參數。接下來我們要使用他,爲了更好地說明函數的“值“這一概念,我們結合最開始定義的sum函數:

使用sum函數:

 val num = 5
    val i  = sum(num)
    val j  = sum(5)

接下來我們再看aa函數的使用:

 val i: Int = aa(fun,9,8)
 val j: Int = aa((a:Int,b:Int) => {a+b},5,6)

fun函數:

def fun(a:Int, b: Int):Int={
    return a+ b
  }

aa的函數參數我們可以使用定義好的函數,也可以使用函數的“值”來使用,就和num 和 5一樣一個是定義好的變量,一個是“值”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章