前言
- 方法可以定义多个参数列表,当使用较少的参数列表调用多参数列表的方法时,会产生一个新的函数,该函数接收剩余的参数列表作为其参数。这被称为柯里化。
- 一个匿名函数和这个匿名函数所处的环境就叫闭包!!!
- 闭包可以延长外部局部变量的声明周期
//柯里化
def add(a: Int)(b: Int) = a + b
//等价于
def add(a:Int,b:Int)= a + b
package com.zhengkw.scala.day03
/**
* @ClassName:closure
* @author: zhengkw
* @description:
* @date: 20/04/22下午 3:13
* @version:1.0
* @since: jdk 1.8 scala 2.11.8
*/
object closure {
def main(args: Array[String]): Unit = {
//柯里化
println(add(1)(3))
//闭包 test执行完以后 得到的f生命周期没有结束
//val f: Int => Int = test(1) f为匿名函数!
val f = test(1)
//每次都能读到test里面的a 即每次都能读到局部变量a的值1!a的生命周期是整个函数的执行时间
println(f(20))
println(f(30))
println(f(40))
}
//柯里化
def add(a: Int)(b: Int) = a + b
//闭包
def test(a: Int) = {
//a出现在一个匿名函数中这个匿名函数 以b为参数 a+b为返回值!
b: Int => a + b
}
}
总结
柯里化运用场景太多,breaks里面的breakable和break其实都是由柯里化来实现的!
闭包可能在不经意时写出来!但是一定和匿名函数有关!