您的位置:首页 > 其它

Scala闭包

2015-01-13 18:13 120 查看
闭包(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,并每次读取它当前的值。如果一个函数没有外部变量,那么它就平凡地被封闭,不需要外部环境。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: