Scala闭包
闭包是函数,它的返回值取决于此函数之外声明一个或多个变量的值。考虑下面的一块使用匿名函数的代码:
val multiplier = (i:Int) => i * 10
在这里,在函数体中使用的唯一变量, i * 0, 为i,其被定义为一个参数的函数。现在,让我们来看另一块代码:
val multiplier = (i:Int) => i * factor
有两个自由变量的乘数:i和factor。其中一个i是一个正式函数参数。因此,它被绑定到一个新的值在乘数每次调用。然而,factor不是一个正式的参数,那么这是什么?让我们增加一行代码:
var factor = 3 val multiplier = (i:Int) => 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 C:/>
上面的函数引用factor并读取每个时间的当前值。如果函数没有外部引用,那么它就是封闭了自己。无需外部环境是必需的。
本站文章除注明转载外,均为本站原创或编译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:代码驿站 [http:/www.codeinn.net]
本文标题:Scala闭包
本文地址:http://www.codeinn.net/scala/1211.html
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:代码驿站 [http:/www.codeinn.net]
本文标题:Scala闭包
本文地址:http://www.codeinn.net/scala/1211.html