Scala Function(高階函式式程式設計)

2021-07-08 13:56:50 字數 1970 閱讀 2026

scala開篇(目錄)

乙個可以進行高階函式式程式設計的模組,我們來看看它都實現了哪些操作,並結合原始碼理解一下。

/**定義兩個函式*/

def fun1 = (v:int) =>

def fun2 = (v:int) =>

//使用

val funs = seq(fun1,fun2)

function.chain[int](funs)(2)

/**fun1的結果作為fun2的入參

202000

*/

看下chain的源**

def

chain[a](fs: seq[a => a]): a => a =

看到 /: 這個符號是不是有點眼熟,我們在scala:array(集合、序列)裡提到過序列的操作中就有這個操作符,他會遍歷序列中的元素去執行指定的操作。

def

const[t, u](x: t)

(y: u): t = x

假如我們要把乙個序列中的元素替換成同乙個值,我們可以使用序列的map方法

list(1, 2, 3, 4, 5).map(_=>7)
那這時我們可以用const來處理

list(1, 2, 3, 4, 5).map(function.const(7))

/**對應原始碼中的x就是7,y就是list中的每個元素

如果我們按照 x+":"+y的形式列印,就是

7:17:2

7:37:4

7:5*/

def tuplefunc = (a:int,b:int) => 

/**使用*/

val funs = function.tupled(tuplefunc)

val v = (1,3)

println(v.getclass.getname)

println(funs(v)) // 4

def tuplefunc = (v:tuple2[int,int]) => 

//轉換

val funs = function.untupled(tuplefunc)

println(funs(2,6)) /** 8 */

/**宣告乙個柯里化函式*/

def curriedsum = (x:int)=>(y:int) => x + y

//轉換

val funs = function.uncurried(curriedsum)

println(funs(1,6)) // 7

原始碼

方法返回結果是帶(a1, a2)兩個引數的函式

def

uncurried[a1, a2, b](f: a1 => a2 => b): (a1, a2) => b =

def optionfun(x : int) = 

//使用

val funs = function.unlift(optionfun)

val chars = array(1,2,3)

//collect需要partialfunction型別引數

val newchars = chars.collect(funs)

println(newchars.mkstring(","))

/**輸出為 10,20,30 */

原始碼(內部呼叫的是partialfunction.unlifted方法)

def

unlift[t, r](f: t => option[r]): partialfunction[t, r] = partialfunction.unlifted(f)

SQL高階高階

select top 50 percent from websites mysql 語法 oracle 語法 select column name s from table name limit number sql like 操作符 like 操作符用於在 where 子句中搜尋列中的指定模式。s...

MySQL高階高階

1 mysql的開窗函式 row number 從 1 開始,按照順序生成組內的記錄編號 rank 從 1 開始,按照順序,相同會重複,名次會留下空的位置,生成組內的記錄編號 dense rank 從 1 開始,按照順序生成組內的記錄編號,相同會重複,名次不會留下空的位置 開窗函式區別如下圖所示 f...

SQL 基礎 高階高階

sql高階 1 top子句 top 子句用於規定要返回的記錄的數目。select top 2 from persons select top 50 percent from persons 3 萬用字元 1 通過使用 not 關鍵字,我們可以從 persons 表中選取居住在不包含 lon 的城市裡...