diff --git a/src/main/scala/chapter2/demo5/DemoCurrying.scala b/src/main/scala/chapter2/demo5/DemoCurrying.scala new file mode 100644 index 0000000..49dac58 --- /dev/null +++ b/src/main/scala/chapter2/demo5/DemoCurrying.scala @@ -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("错误日志") + + + } +}