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

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

开发者学堂课程【大数据 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. 闭包是一个对象

相关文章
|
6月前
|
安全 Java Go
Go语言基础与面向对象编程概念
【2月更文挑战第10天】本文旨在介绍Go语言的基本特性和面向对象编程(OOP)的核心概念,以及如何将这两者结合起来。通过Go语言的结构体和方法实现封装、继承和多态,让读者深入理解面向对象编程在Go中的实现方式。文章适合对Go语言感兴趣的初学者和想要了解OOP在Go中如何应用的开发者。
|
存储 缓存 JavaScript
闭包的概念?优缺点?使用场景?
闭包的概念?优缺点?使用场景?
|
28天前
|
存储 前端开发 JavaScript
前端必备知识:闭包的概念、作用与应用
前端必备知识:闭包的概念、作用与应用
16 1
|
11天前
|
缓存 开发者 网络架构
ArkTS 函数方法基础:掌握核心编程概念
本文深入探讨了ArkTS中的函数和方法,涵盖函数声明、参数处理、返回类型、作用域、函数类型等内容,帮助开发者掌握ArkTS的核心编程概念。通过实例讲解可选参数、rest参数、默认参数等特性,并讨论函数在面向对象编程、性能优化和错误处理中的应用,助力开发者编写更健壮、可维护的代码。
150 0
|
3月前
|
编译器 Go
Go语言中的闭包:封装数据与功能的强大工具
Go语言中的闭包:封装数据与功能的强大工具
|
5月前
|
存储 JavaScript 前端开发
技术经验解读:什么是闭包?闭包的优缺点?
技术经验解读:什么是闭包?闭包的优缺点?
49 1
|
5月前
|
C++ Python
Python闭包概念该怎么理解
Python闭包概念该怎么理解
24 0
|
5月前
|
Go
Go语言进阶篇——浅谈函数中的闭包
Go语言进阶篇——浅谈函数中的闭包
|
6月前
|
自然语言处理 JavaScript 前端开发
JavaScript开发基础问题:如何理解闭包及其作用?
JavaScript开发基础问题:如何理解闭包及其作用?
58 5
|
安全 编译器 程序员
深入浅出闭包
深入浅出闭包
55 0
下一篇
无影云桌面