Scala闭包

闭包(Closure)是引用了自由变量的函数,它的返回值依赖于这个函数外部的一个或者多个变量。
闭包本身类,它的特点是它所创建的对象实例可以引用外部函数/类里面的变量。 即闭包就是能够读取外部函数的内部变量的函数。
如下面这段匿名的函数:

val multiplier = (i:Int) => i * 10
在这个函数体内有一个变量i,它作为函数的一个参数。如下面的另一段代码:
val multiplier = (i:Int) => i * factor
在multiplier中有两个自由变量:i和factor。其中的一个i为函数的形式参数,每次multiplier被调用时,i被赋予一个新的值。然而,factor不是形式参数,那它是什么呢?考虑下面代码:
var factor = 3
val multiplier = (i:Int) => i * factor
factor有一个在函数的外边的变量的引用,但是在一个封闭的作用域内。如下边示例:
object Test {
   def main(args: Array[String]) {
      println( "muliplier(1) value = " +  multiplier(1) )
      println( "muliplier(2) value = " +  multiplier(2) )
   }
   var factor = 3
   val multiplier = (i:Int) => i * factor
}
当以上代码被编译执行后,产生如下结果:
C:/>scalac Test.scala
C:/>scala Test
muliplier(1) value = 3
muliplier(2) value = 6
上面的函数引用了factor,并每次读取它当前的值。如果一个函数没有外部变量,那么它就平凡地被封闭,不需要外部环境。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值