大数据全系列 教程
1869个小节阅读:467k
目录
408考研
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
xxxxxxxxxx
package com.itbaizhan.chapter03
//闭包
object FunctionClosure {
def main(args: Array[String]): Unit = {
def outer(x:Int): (Int)=>Int ={
def inner(y:Int): Int ={
x+y
}
inner _
}
//println(outer(2)(3))
val fun = outer(2)
val fun2 = fun(3)
println(fun2)
}
}
由于在执行inner的时候,outer已经出栈了,所以变量x已经不存在,那么在inner中该如何进行计算呢,底层又是如何实现的呢?
反编译:选择target/classes/com/itbaizhan/chapter03/FunctionClosure->右键->Decompile Scala to Java
xxxxxxxxxx
private static final int inner$1(final int y, final int x$1) {
return x$1 + y;
}
private static final Function1 outer$1(final int x) {
return (y) -> {
return inner$1(y, x);
};
}
以上代码很明显是两个方法,乍一看存在inner执行时outer已经出栈的问题,但是运行程序时却可以正常执行,并能够计算结果出来,为什么呢?
闭包定义:一个函数使用了外部函数的变量,把这个变量包含到了它的内部函数中来使用,改变了这个变量的生命周期,将当前的代码形成了一个闭合的环境,这个环境被称为闭包环境,简称为闭包。
扩展:
实时效果反馈
1. 填空:Scala2.12+ 闭包功能采用的是();Scala2.12- 闭包功能采用的是()
A 匿名函数类型实现的。
B 更改函数声明实现的。
答案:
1=>BA 。