feat:线下课:函数柯里化

This commit is contained in:
2026-09-14 11:07:08 +08:00
parent baa611b5be
commit f750979b82
@@ -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("错误日志")
}
}