首页 > 其他 > 详细

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

时间:2016-02-13 23:14:00      阅读:422      评论:0      收藏:0      [点我收藏+]

 闭包是函数,它的返回值取决于此函数之外声明一个或多个变量的值。

 假设,我们想写一个函数 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的值,这一过程可以被理解为做对函数执行“关闭”操作,所以叫闭包。


本文出自 “叮咚” 博客,请务必保留此出处http://lqding.blog.51cto.com/9123978/1741837

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

原文:http://lqding.blog.51cto.com/9123978/1741837

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!