您的位置:首页 > 其它

第22讲: Scala中的闭包实战详解

2016-02-13 22:04 344 查看
闭包是函数,它的返回值取决于此函数之外声明一个或多个变量的值。
假设,我们想写一个函数 f(x) ,该函数的返回值取决于变量 i 。伪代码为
f(x) = x + i
我们尝试着写写这个函数
scala> def f(x : Int) = x + i
<console>:10: error: not found: value i
def f(x : Int) = x + i
很明显,i 没有声明,那么能不能先声明变量i,再定义函数呢?
在scala中,定义一个变量,必须初始化。
scala> var i : Int
<console>:10: error: only classes can have declared but undefined members
(Note that variables need to be initialized to be defined)
var i : Int


一旦初始化了,那么上面的函数也就不依赖于变量i了。
scala中提供了如下的写法
def f(x:Int) = (i : Int) => (x+i)
此时函数就依赖于i,并且i的值是未知的。
示例代码如下:

object ClosureOps {
def main(args: Array[String]): Unit = {

def f(x:Int) = (i : Int) => (x+i)
val a = f(1)
val b = f(2)
println(a(10))
println(b(20))

}
}


即函数值若想被创建必须捕获i的值,这一过程可以被理解为做对函数执行“关闭”操作,所以叫闭包。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  闭包 scala 实战详解