闭包:函数式编程的标配
(1)说明
闭包:如果一个函数,访问到了它的外部(局部)变量的值,那么这个函数和他所处的环境,称为闭包
函数柯里化:把一个参数列表的多个参数,变成多个参数列表
(2)案例实操
(1)闭包
定义两个参数求和的函数
1.考虑固定一个加数的场景,只改变一个加数
// 以下代码
// 兼容性非常好,通用性强,适用性差
// 适应性差,每次使用函数都要向里面传入两个参数
def add(a:Int,b:Int):Int ={
a+b
}
println(add(1,2))
2.拓展固定加数改变情况
def add3(b:Int):Int ={
5+b
}
3.将一个固定参数作为另一个参数传入,但是是作为“第一层参数”传入
def add4():Int=>Int ={
val a = 4
def addB(b:Int):Int ={
a+b
}
addB
}
def add5(a:Int):Int=>Int ={
def addB(b:Int):Int ={
a+b
}
addB
}
println(add5(56)(45))
val add6 =add5(5)
val add7=add5(8)
println(add6(12))
println(add7(45))
// 闭包通用性的体现
4.Lambad表达式简写
def addByA1(a:Int):Int=>Int={
(b:Int)=>{
a+b
}
}
简化1
def addByA2(a:Int):Int=>Int={
b=>a+b
}
简化2
def addByA3(a:Int):Int=>Int= a +_
输出
// 定义
val addA3 =addByA3(5)
val addA4=addByA3(8)
// 输出
println(addA3(12))
println(addA4(45))
5.柯里化
def addCurrying(a:Int)(b:Int):Int={
a+b
}
println(addCurrying(35)(24))