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