虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Scala > Scala闭包

Scala闭包
类别:Scala   作者:码皇   来源:互联网   点击:

闭包是函数,它的返回值取决于此函数之外声明一个或多个变量的值。考虑下面的一块使用匿名函数的代码:valmultiplier=(i:Int)=>i*10在这里,在函数体中使用的唯一变量, i * 0, 为i,其被定义为一个参数的函

闭包是函数,它的返回值取决于此函数之外声明一个或多个变量的值。考虑下面的一块使用匿名函数的代码:

  1. val multiplier = (i:Int) => i * 10 

在这里,在函数体中使用的唯一变量, i * 0, 为i,其被定义为一个参数的函数。现在,让我们来看另一块代码:

  1. val multiplier = (i:Int) => i * factor 

有两个自由变量的乘数:i和factor。其中一个i是一个正式函数参数。因此,它被绑定到一个新的值在乘数每次调用。然而,factor不是一个正式的参数,那么这是什么?让我们增加一行代码:

  1. var factor = 3 
  2. val multiplier = (i:Int) => i * factor 

现在,factor具有参考变量在函数之外,但为封闭范围的变量。让我们试试下面的例子:
 

  1. object Test { 
  2.    def main(args: Array[String]) { 
  3.       println( "muliplier(1) value = " +  multiplier(1) ) 
  4.       println( "muliplier(2) value = " +  multiplier(2) ) 
  5.    } 
  6.    var factor = 3 
  7.    val multiplier = (i:Int) => i * factor 

让我们编译和运行上面的程序,这将产生以下结果:

  1. C:/>scalac Test.scala 
  2. C:/>scala Test 
  3. muliplier(1) value = 3 
  4. muliplier(2) value = 6 
  5.  
  6. C:/> 

上面的函数引用factor并读取每个时间的当前值。如果函数没有外部引用,那么它就是封闭了自己。无需外部环境是必需的。

相关热词搜索: 闭包
上一篇:Scala函数
下一篇:Scala字符串