63 lines
1.3 KiB
Scala
63 lines
1.3 KiB
Scala
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("错误日志")
|
|
|
|
|
|
}
|
|
}
|