package com.scala.A
//----------------------------------------------------------------------------------------------------------------------
/**
* 函数柯里化&&闭包(必须要掌握)
* 闭包的基本概念和底层原理
* 闭包是函数式编程的标配(java中使用接口和内部类实现,java1.8后也借鉴了scala的闭包)
*
* 1)说明
* 闭包:如果一个函数,访问到了它的外部(局部)变量的值,那么这个函数和他所处的环境,称为闭包
* 函数柯里化:把一个参数列表的多个参数,变成多个参数列表。
* 2)实例操作
**/
//----------------------------------------------------------------------------------------------------------------------
object scala_function_03_0 {
def main(args: Array[String]): Unit = {
/**
* 1)闭包
* f1函数无参数,将函数作为函数值
* 具体分析f1函数:名称f1,函数没有参数,但是声明了参数列表(就是加了小括号),它的返回值类型是一个函数类型(Int=>Int)
**/
def f1() = {
var a: Int = 10
/** 内部函数f2在调用的过程中,还使用到了外部变量a */
def f2(b: Int) = {
a + b
}
/** 调用f2函数 */
f2 _
}
//----------------------------------------------------------------------------------------------------------------------
/**
* 在调用时,f1函数执行完毕后,局部变量a应该随着栈空间释放掉
* 这里小括号可加可以不加
**/
val f = f1
val f_1 = f1()
/**
* 但是在此处,变量 a 其实并没有释放,而是包含在了 f2 函数的内部,形成了闭合的效果
* 这两个是等价的
**/
println(f1()(3))
println(f(3))
println(f_1(3))
//----------------------------------------------------------------------------------------------------------------------
/**
* 函数柯里化:其实就是将复杂的参数逻辑变得简单化,函数柯里化一定存在闭包
**/
def f3()(b: Int) = {
var a: Int = 10
a + b
}
println(f3()(3))
}
//----------------------------------------------------------------------------------------------------------------------
}
Scala-函数柯里化&&闭包(必须要掌握) 的基本概念和底层原理
最新推荐文章于 2024-04-09 09:01:03 发布