每天学一点Scala之 闭包

简介:
  1. 定义

函数在变量不处于其有效作用域时,还能够对变量进行访问,即为闭包;也就是说,变量超出了其作用域,还可以使用,就是闭包现象。

  1. 可能针对的使用场景之一?

比方说,年底了,公司针对每个部门的奖金是不同。比方说,销售部门奖金为10000,研发部门是15000,测试部门12000等,就可以使用闭包来实现

例子,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
object  BiBaoTest {
    def  main(args :  Array[String]) :  Unit  =  {
       val  salesDepartment  =  add( 10000 //变量salesDepartment相等于一个匿名函数,wages + 10000
       
       println( "---->:\t"  + salesDepartment( 10 ))  //为销售部门的某一个员工发工资,基本工资是10
       
       val  rDdepartment  =  add( 15000 //变量rDdepartment相等于一个匿名函数,wages + 15000
       
       println( "---->:\t"  + rDdepartment( 100 ))
       
       val  testDepartment  =  add( 12000 //变量testDepartment相等于一个匿名函数,wages + 12000
       
       println( "---->:\t"  + testDepartment( 10 ))
    }
    
    def  add(bonus :  Int)  =  (wages :  Int)  = > wages + bonus  //bonus,这种形式就是闭包现象
}

或者这样理解,闭包,是具有某种规律的匿名函数的,更高层次的抽象,

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(x :  Int)  = > x +  1
 
(x :  Int)  = > x +  14
 
(x :  Int)  = > x +  3
 
(x :  Int)  = > x +  9
 
(x :  Int)  = > x +  7
 
(x :  Int)  = > x +  10
 
(x :  Int)  = > x +  100
 
...
 
这种匿名函数,结构上,很相似,整体是累加运算,因此,可以抽象成
 
def  add(y :  Int)  =  (x :  Int) = > x + y
 
这种形式


也就是说,传入的y值不同,就会返回不同的匿名函数













本文转自故新51CTO博客,原文链接: http://blog.51cto.com/xingej/1964238,如需转载请自行联系原作者












相关文章
|
2月前
|
Scala
Scala 闭包
Scala 闭包
30 0
|
大数据 Serverless Scala
大数据开发基础的编程语言的Scala的函数和闭包
Scala是一种支持函数式编程的编程语言,它具有强大的函数和闭包功能。本文将介绍Scala中函数和闭包的概念和用法,帮助开发者更好地理解和应用这门语言。
92 0
|
Scala
第6关:Scala函数柯里化和闭包
第6关:Scala函数柯里化和闭包
168 0
第6关:Scala函数柯里化和闭包
|
分布式计算 Scala Spark
一天学完spark的Scala基础语法教程五、闭包(idea版本)
一天学完spark的Scala基础语法教程五、闭包(idea版本)
94 0
一天学完spark的Scala基础语法教程五、闭包(idea版本)
|
Scala
Scala入门到精通——第五节 函数与闭包
本节主要内容 (一)函数字面量(值函数) (二)匿名函数 (三)函数的简化 (四)函数参数 (四)闭包 函数字面量(值函数) 函数字面量(function literal),也称值函数(function values),指的是函数可以赋值给变量。 一般函数具有如下形式: 而函数字面量具有如下形式: /* 函数字面量 function lit
5847 0
|
3月前
|
分布式计算 大数据 Java
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
77 5
|
3月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
57 3
|
3月前
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
51 0
|
3月前
|
消息中间件 存储 分布式计算
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
105 0
|
3月前
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
47 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方