Scala高階特性 函式式程式設計

2021-08-29 14:14:03 字數 1957 閱讀 3769

目標一:深入理解高階函式

目標二:深入理解隱式轉換

高階函式

概念scala混合了物件導向和函式式的特性,我們通常將可以做為引數傳遞到方法中的表示式叫做函式。在函式式程式語言中,函式是「頭等公民」,高階函式包含:作為值的函式、匿名函式、閉包、柯里化等等。

作為值的函式

可以像任何其他資料型別一樣被傳遞和操作的函式,每當你想要給演算法傳入具體動作時這個特性就會變得非常有用。

定義函式時格式:val 變數名 =

(輸入引數型別和個數

)=>

函式實現和返回值型別和個數

「=」表示將函式賦給乙個變數「=>」左面表示輸入引數名稱、型別和個數,右邊表示函式的實現和返回值型別和引數個數

2匿名函式

在scala中,你不需要給每乙個函式命名,沒有將函式賦給變數的函式叫做匿名函式

由於scala可以自動推斷出引數的型別,所有可以寫的跟精簡一些 

還記得神奇的下劃線嗎?這才是終極方式

將方法轉換成函式

在scala中,方法和函式是不一樣的,最本質的區別是函式可以做為引數傳遞到方法中

但是方法可以被轉換成函式,神奇的下劃線   _又出場了

柯里化==>多個引數轉換成乙個引數乙個引數的傳到的過程

柯里化指的是將原來接受兩個引數的方法變成新的接受乙個引數的方法的過程

//第一種:最直觀的方式 (int) => int

//new_list = list.map((x: int) => x * 3)

//第二種:由於map方法知道你會傳入乙個型別為(int) => int的函式,你可以簡寫

//new_list = list.map((x) => x * 3)

//第三種:對於只有乙個引數的函式,你可以省去引數外圍的()

//new_list = list.map(x => x * 3)

//第四種:(終極方式)如果引數在=>右側只出現一次,可以使用_

new_list = list.map(_ * 3)

new_list.foreach(println(_))

var a = array(1,2,3)

a.map(_* 3)

}}

Scala之函式式程式設計高階

給你乙個集合 val list list 1,2,3,4,abc 請完成如下要求 將集合 list 中的所有數字 1,並返回乙個新的集合 要求忽略掉 非數字 的元素,即返回的 新的集合 形式為 2,3,4,5 object partialfundemo01 模式匹配 def addone2 i an...

Scala函式特性系列 高階函式

帶函式引數的函式由於是乙個接受函式引數的函式,故被稱為 高階函式,像之前講到的 map 函式就是高階函式。如下例所示 上述 中,函式接受乙個函式 f作為引數,接受乙個 int型別的引數,進行 f v 運算,在下面又給出了 f具體的定義 layout 函式 同樣的,高階函式也可以產出另乙個函式 即返回...

SCALA函式式程式設計

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 scala的語法規定,將函式賦值給變數時,必須在函式後面加上空格和下劃線 正常宣告乙個帶有乙個字串型別引數,並返回unit型別的方法 sca...