-
定义
函数在变量不处于其有效作用域时,还能够对变量进行访问,即为闭包;也就是说,变量超出了其作用域,还可以使用,就是闭包现象。
-
可能针对的使用场景之一?
比方说,年底了,公司针对每个部门的奖金是不同。比方说,销售部门奖金为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,如需转载请自行联系原作者