开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:高级特性_闭包_概念】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/689/detail/12029
高级特性_闭包_概念
内容简介
一、程序编写
二、什么是闭包
在介绍高级特性前,先了解一个概念:闭包。
先了解闭包的概念,在了解后面内容会更容易一些,闭包是一个前提,通过本节学习会了解什么是闭包,这个词的意思是什么,什么是高阶函数,在 scala 中闭包本质是什么,并且在后面学到的作用域有更好认识,做一个铺垫效果。
接下来会介绍两个内容:闭包和 spark 中的闭包
本节会通过两个步骤学习闭包,首先是程序编写,然后是探究什么是闭包。
一、程序编写
打开笔记,闭包中有一个小的专题,第一步把闭包的程序写出来,再去检讨程序里面有什么问题、什么是闭包?
@test
Def test
():unit = {
Val f:int => double = Clasure()
Val area = areaFunction
(2)
Println
(area)
}
Def cloaure()
:int => double = {
Val factor = 3.14
Val areafunction = (r: int) => math.pow(r.2)*factor
Areafunction
笔记小专题中首先要编写闭包程序,再去查找有什么内容
1. 进入代码,将之间的类关掉,在 RDD 中创建一个新的 class
Closure 就是闭包的意思
2.编写
/**
*编写一个高阶函数,在这个函数内要有一个变量,返回一个函数,通过这个变量完成一个计算
*/
@test
Def test
():unit = {
// 编写两个方法,第一个方法是 task,慢方法使用,函数和方法可以相互转换
Val f:int => double = Clasure()
//f 是函数
Val area = F
(5)
Println
(area)
}
/**
*返回一个新的函数
*/
Def cloaure()
:int => double = {
Val factor = 3.14
//定义变量
Val areafunction = (r: int) => math.pow(r.2)*factor
// 对外返回函数,计算圆的面积:半径的平方乘圆周率
// math 数学,pow 求平方
Areafunction
//方式返回掉
}
在调用 closure 函数时,拿到的是什么?
拿到的不是结果
factor 3.14与内部相乘
运行结果
运行完后对程序进行了一些解构,总体步骤就是这样,返回一个高阶函数
接下里进行解构,在 cloaure 中定义了一个 factor ,叫做3.14
3.将 f 的内容注销
@test
Def test
():unit = {
//在这能否访问到 factor,不能
//说明 factor在一个单独的作用域中
//在拿到 f 的时候,可以通过 f 间接的访问到 cloaure 作用域中的内容
//说明 f 携带了一个作用域
//如果一个函数携带了一个外包的作用域,这种函数我们称之为闭包
Val f = closure
()
F
(5)
/**
*返回一个新的函数
*/
Def cloaure()
:int => double = {
Val factor = 3.1
4 //定义变量
Val areafunction = (r: int) => {
math.pow(r.2)*factor
// 计算圆的面积 # f 被定义 #子类和父类作用域
//f在这里被定义,f 就可以通过另一个作用域去访问 factor,所以少 f 携带一个作用域,在这个方式生成时,作用域也生成
Areafunction
//这个作用域与外面作用域呈包含关系,子可以访问父类的内容
在 clasure 上访问 factor,显示不能访问,因为 test 与 closure 为同级关系
拿到一个方式传递出一个5,在执行任务中 foctor 被间接调用
二、 闭包的本质是什么
1.f 就是闭包,闭包的本质就是一个函数
2. 在 scala 中函数是一个特殊的类型,functionx
3. 闭包也是一个 functionx 的类型的对象
4. 闭包是一个对象