闭包是一个函数,返回值依赖于声明在函数外部的一个或者多个变量。闭包通常来讲可以简单的认为是可以访问一个函数里面的局部变量的另外一个函数。如下面这个匿名函数:
val multiplier = (i:Int)=>i*10
函数体内有一个变量i,它作为函数的一个参数。如下的另外一段代码:
val multiplier = (i:Int)=>i*factor
在multiplier中有两个变量:i和factor。其中i是函数的形式参数,在multiplier函数被调用时,i被赋予一个新的值。然而,factor不是形式参数,而是自由变量,考虑下面的代码:
val factor = 3;
val multiplier = (i:Int)=>i*factor
这里我们引入一个自由变量factor,这个变量定义在函数外面。这样定义的函数变量multiplier成为一个闭包,因为它引用到函数外面定义的变量,定义这个函数的过程是将这个自由变量捕获而构成一个封闭的函数。
下面是一个完整的实例:
object Test1 {
def main(args:Array[String]){
println("multiplier(1) value = "+multiplier(1));
println("multiplier(2) value = "+multiplier(2));
}
var factor = 3;
var multiplier = (i:Int)=>i*factor;
}
编译并执行以上代码,输出结果如下:
E:\Scala>scalac Test1.scala
E:\Scala>scala Test1
multiplier(1) value = 3
multiplier(2) value = 6









网友评论