feat:线下课:函数柯里化
This commit is contained in:
@@ -0,0 +1,62 @@
|
|||||||
|
package chapter2.demo5
|
||||||
|
|
||||||
|
object DemoCurrying {
|
||||||
|
def main(args: Array[String]): Unit = {
|
||||||
|
|
||||||
|
def add(x: Int, y: Int): Int = x + y
|
||||||
|
|
||||||
|
println(add(2, 3))
|
||||||
|
|
||||||
|
def addTaowa(x: Int): Int => Int = {
|
||||||
|
def add(y: Int): Int = x + y
|
||||||
|
|
||||||
|
add
|
||||||
|
}
|
||||||
|
|
||||||
|
println(addTaowa(2)(3))
|
||||||
|
|
||||||
|
def addTaowa2(x: Int): Int => Int = {
|
||||||
|
(y: Int) => x + y
|
||||||
|
}
|
||||||
|
|
||||||
|
println(addTaowa2(2)(3))
|
||||||
|
// def add(x: Int, y: Int): Int = x + y
|
||||||
|
def addCurrying(x: Int)(y: Int): Int = {
|
||||||
|
x + y
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
val addLambda = (x:Int,y:Int) => x+y
|
||||||
|
// add是普通函数,可以通过scala自带的curried方法转成一个柯里化函数
|
||||||
|
val curriedAdd = addLambda.curried
|
||||||
|
addLambda(1,2)
|
||||||
|
curriedAdd(1)(2)
|
||||||
|
|
||||||
|
println(addCurrying(2)(3))
|
||||||
|
val add2 = addCurrying(2) _
|
||||||
|
|
||||||
|
add2(3)
|
||||||
|
add2(4)
|
||||||
|
|
||||||
|
// 柯里化的使用场景
|
||||||
|
// 柯里化可以部分记住参数的固定值
|
||||||
|
// debug info warn error
|
||||||
|
def log(level: String)(message: String): Unit = {
|
||||||
|
println(s"[$level] - $message")
|
||||||
|
}
|
||||||
|
log("info")("这是一条info级别的日志")
|
||||||
|
log("warn")("这是一条warn级别的日志")
|
||||||
|
log("error")("这是一条error级别的日志")
|
||||||
|
|
||||||
|
val infoLog = log("info") _
|
||||||
|
val warnLog = log("warn") _
|
||||||
|
val errorLog = log("error") _
|
||||||
|
|
||||||
|
// 闭包
|
||||||
|
infoLog("普通日志")
|
||||||
|
warnLog("告警日志")
|
||||||
|
errorLog("错误日志")
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user