高级特性_闭包_概念 | 学习笔记

简介: 快速学习 高级特性_闭包_概念

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段高级特性_闭包_概念学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/689/detail/12029


高级特性_闭包_概念


内容简介

一、程序编写

二、什么是闭包

 

在介绍高级特性前,先了解一个概念:闭包。

先了解闭包的概念,在了解后面内容会更容易一些,闭包是一个前提,通过本节学习会了解什么是闭包,这个词的意思是什么,什么是高阶函数,在 scala 中闭包本质是什么,并且在后面学到的作用域有更好认识,做一个铺垫效果。

接下来会介绍两个内容:闭包和 spark 中的闭包

本节会通过两个步骤学习闭包,首先是程序编写,然后是探究什么是闭包。

 

一、程序编写

打开笔记,闭包中有一个小的专题,第一步把闭包的程序写出来,再去检讨程序里面有什么问题、什么是闭包?

@test

Def test():unit = {

Val f:int => double = Clasure()

Val area = areaFunction2

Printlnarea

}

Def cloaure()int => double = {

Val factor = 3.14

Val areafunction = (r: int) => math.pow(r.2)*factor

Areafunction

笔记小专题中首先要编写闭包程序,再去查找有什么内容

1.  进入代码,将之间的类关掉,在 RDD 中创建一个新的 class

Closure 就是闭包的意思

image.png

2.编写

/**

*编写一个高阶函数,在这个函数内要有一个变量,返回一个函数,通过这个变量完成一个计算

*/

@test

Def test():unit = {    // 编写两个方法,第一个方法是 task,慢方法使用,函数和方法可以相互转换

Val f:int => double = Clasure()  //f 是函数

Val area = F5

Printlnarea

}

/**

*返回一个新的函数

*/

Def cloaure()int => double = {

Val factor = 3.14  //定义变量

Val areafunction = (r: int) => math.pow(r.2)*factor  // 对外返回函数,计算圆的面积:半径的平方乘圆周率

// math 数学,pow 求平方

Areafunction //方式返回掉

}

在调用 closure 函数时,拿到的是什么?

拿到的不是结果

factor 3.14与内部相乘

运行结果

image.png

运行完后对程序进行了一些解构,总体步骤就是这样,返回一个高阶函数

接下里进行解构,在 cloaure 中定义了一个 factor ,叫做3.14

3. f 的内容注销

@test

Def test():unit = {

//在这能否访问到 factor,不能

//说明 factor在一个单独的作用域中

//在拿到 f 的时候,可以通过 f 间接的访问到 cloaure 作用域中的内容

//说明 f 携带了一个作用域

//如果一个函数携带了一个外包的作用域,这种函数我们称之为闭包

Val f = closure()

F5

/**

*返回一个新的函数

*/

Def cloaure()int => double = {

Val factor = 3.14  //定义变量

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. 闭包是一个对象

相关文章
|
2天前
|
安全 Java Go
Go语言基础与面向对象编程概念
【2月更文挑战第10天】本文旨在介绍Go语言的基本特性和面向对象编程(OOP)的核心概念,以及如何将这两者结合起来。通过Go语言的结构体和方法实现封装、继承和多态,让读者深入理解面向对象编程在Go中的实现方式。文章适合对Go语言感兴趣的初学者和想要了解OOP在Go中如何应用的开发者。
|
7月前
|
Go
深度解析:Go语言面向对象编程和方法调用机制
深度解析:Go语言面向对象编程和方法调用机制
35 0
|
8月前
|
存储 缓存 JavaScript
闭包的概念?优缺点?使用场景?
闭包的概念?优缺点?使用场景?
|
8月前
|
自然语言处理 前端开发 JavaScript
前端经典面试题 | 闭包的作用和原理
前端经典面试题 | 闭包的作用和原理
|
2天前
|
自然语言处理 JavaScript 前端开发
JavaScript开发基础问题:如何理解闭包及其作用?
JavaScript开发基础问题:如何理解闭包及其作用?
38 5
|
10月前
|
安全 编译器 程序员
深入浅出闭包
深入浅出闭包
39 0
|
分布式计算 大数据 Spark
高级特性_闭包_Spark 闭包分发 | 学习笔记
快速学习 高级特性_闭包_Spark 闭包分发
62 0
高级特性_闭包_Spark 闭包分发 | 学习笔记
|
Java Scala 开发者
函数式编程几个重要概念|学习笔记
快速学习函数式编程几个重要概念。
59 0
函数式编程几个重要概念|学习笔记
|
开发者 Python
闭包的概念 | 学习笔记
快速学习闭包的概念
92 0
|
Go 开发者
闭包的基本介绍|学习笔记
快速学习闭包的基本介绍
60 0
闭包的基本介绍|学习笔记