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 的城市裡...