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值不同,就会返回不同的匿名函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值