Scala编程之闭包(closure)
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,一、概念闭包:我们把一个函数与其相关引用环境(变量)组合成一个整体叫做闭包概念晦涩难懂,下面我们用一个例子说明二、小例子def minusxy(x:Int) = (y:Int)=>x-yval f=m
千家信息网最后更新 2025年12月02日Scala编程之闭包(closure)
一、概念
闭包:我们把一个函数与其相关引用环境(变量)组合成一个整体叫做闭包
概念晦涩难懂,下面我们用一个例子说明
二、小例子
def minusxy(x:Int) = (y:Int)=>x-yval f=minusxy(20)println("f(1)="+f(1))//19println("f(2)="+f(2))//18minusxy中x是匿名函数外部变量,但是却被用在匿名函数的里面,就像关在匿名函数里面一样,所以我们把一个函数与其相关引用环境(变量)组合成一个整体叫做闭包
解释:
1) (y: Int)=>x-y
返回的是一个匿名函数,因为该函数引用到到函数外的x,那么该函数和x整体形成一个闭包
如:这里val f= minusxy(20)的f函数就是闭包
2)你可以这样理解,返回函数是一个对象,而x就是该对象的一个字段,他们共同形成一个闭包
3)当多次调用f时(可以理解多次调用闭包),发现使用的是同一个x,所以ⅹ不变
4)在使用闭包时,主要搞清楚返回函数引用了函数外的哪些变量,因为他们会组合成一个整体(实体),形成一个闭包
相信你通过上面那个例子已经有所理解了,那么试试下面这个需求把
三、练练手
1)编写一个函数 makeSuffix(suffix: String)可以接收一个文件后缀名(比如.jpg),并返回一个闭包(closure)
2)调用闭包,可以传入一个文件名
如果该文件名没有指定的后缀(比如.jpg),则返回文件名.jpg。 文件名是 dog =》dog.jpg
如果已经有.jpg后缀,则返回原文件名。 文件名是cat.jpg => cat.jpg
3)要求使用闭包的方式完成
提示:String.endsWith(xx)
=========假装有条分割线=============
object ClosureDemo { def main(args: Array[String]): Unit = { val f=makeSuffix(".jpg") println(f("cat")) println(f("dog.jpg")) } /** * 闭包 * @param suffix 变量 * @return */ def makeSuffix(suffix:String)=(fileName:String)=>{if (fileName.endsWith(suffix)) fileName else fileName+suffix}}四、闭包的好处
通过上边那个小练习我们知道,如果使用传统的方法,也可以轻松实现这个功能,但是传统方法需要每次都传入后缀名,比如.jpg,而闭包因为可以保留上次引用的某个值,所以我们传入一次就可以反复使用。
闭包
函数
文件
文件名
变量
后缀
整体
例子
传统
对象
就是
方法
概念
环境
晦涩
上边
分割线
功能
好处
字段
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
搭建一个服务器多少钱
制造企业机器学习数据库
软件开发工程师考研的好处
dm数据库 jdbc
鸿蒙软件开发计算器
网络安全产品投广
火炬之光3联不上服务器
江西捷配互联网科技有限公司
天津信息化软件开发定制价格
京东商家数据库设计
查询数据库中同义词
数字货币推广重中之重是网络安全
网络技术三级题目组成
万方数据库的检索词
南瑞软件开发岗待遇
找不到服务器的ip地址该怎么办
软件开发不想做了怎么办
巴中it软件开发培训班
我身边的网络安全介绍
gb 软件开发过程
网络安全从你做起
资讯信息数据库设计
软件开发部做什么费用
上海服务器 托管
mpacc数据库
亚马逊海外购服务器
网络安全是否重要
mysql 上传数据库
软件开发从哪开始
网络安全歌曲《防》