Scala:Function1、Function2
阿新 • • 發佈:2019-02-12
Function1
帶一個引數的方法,宣告時,它需要兩個泛型引數,第一個是傳入的資料型別,第二個表示返回的資料型別,Function1是 trait ,它有一個apply方法,用來對輸入引數進行處理了,使用Function1,必須實現apply介面
val funs = new Function1[Int,Int] {
def apply(x:Int) = {
x + 1
}
}
//使用
println(funs.apply(5)) // 6
andThen
和另一個Function1例項組合成一個新的Function1例項,當前這個方法先執行,執行完的結果作為另一個方法的入參
val funs = new Function1[Int,Int] {
def apply(x:Int) = {
println("第一步:"+x)
x + 1
}
}
val succ = (x: Int) => {
println("第二步:"+x)
x + 3
}
println(succ.andThen(funs).apply(5))
/**
第二步:5
第一步:8
*/
compose
與andThen相反,同樣是組合成新的Function1,但是作為引數的那個Function1先執行
//依然執行這個列印過程
println(succ.compose(funs).apply(5))
/**
第一步:5
第二步:6
*/
Function2
帶兩個引數的方法,它的宣告需要三個泛型引數,前兩個是入參型別,第三個是返回資料型別,同Function1一樣,也要實現apply方法
val funs = new Function2[Int,Int,Int] {
def apply(x:Int,y:Int) = {
x + y
}
}
println(funs.apply(1,2)) // 3
curried
為當前方法建立一個柯里化的版本
val funs = new Function2[Int,Int,Int] {
def apply(x:Int,y:Int) = {
x + y
}
}
val curryfun = funs.curried
println(curryfun(1)(2)) // 3
tupled
為當前方法建立一個tupled(元組)版本
val funs = new Function2[Int,Int,Int] {
def apply(x:Int,y:Int) = {
x + y
}
}
val tupledfun = funs.tupled
println(tupledfun((1,2)))