千家信息网

每天学一点Scala之 闭包

发表于:2025-02-21 作者:千家信息网编辑
千家信息网最后更新 2025年02月21日,定义函数在变量不处于其有效作用域时,还能够对变量进行访问,即为闭包;也就是说,变量超出了其作用域,还可以使用,就是闭包现象。可能针对的使用场景之一?比方说,年底了,公司针对每个部门的奖金是不同。比方说
千家信息网最后更新 2025年02月21日每天学一点Scala之 闭包
  1. 定义

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

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

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

例子,如下:

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,这种形式就是闭包现象}

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

如:

(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