`
mushme
  • 浏览: 778144 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

什么是闭包?翻译

 
阅读更多
翻译了一偏比较老的文章,翻译的很勉强。

原文地址:http://javapapers.com/core-java/java-closures/

在这篇文章,我将解释闭包是什么,并说明闭包和内部匿名类的差别,还将介绍java目前闭包的发展。
首先,我要声明以下两点:
1.在jdk1.6中我们没有闭包。
2.在java中内部匿名类不是闭包。
闭包的定义
内嵌的方法类型,我们称为闭包。我来解释下这个定义。一个匿名方法可以获取它周围的变量的快照。
闭包的定义有两部分,一部分是回调,这是一个植入点,可以把函数当作一个参数。另外一部分是回调函数嵌套一些环境信息,就象一个环境的快照。
闭包也常常被认为是一个对象类,它可以获取到闭包范围内的属性。
就象Christopher Strachey在“深入编程语言”中定义的那样,对象类可以保存在一个数据结构中,象参数一样传递,象方法一样返回,能在运行时以独立的身份运行。
数学概念中对闭包的定义是,当你操作一个set中的成员时,结果仍然是set中的成员时,这就是闭包。
匿名内部类不是闭包
java中的匿名类和闭包非常相像。匿名类不100%满足闭包的定义,但是非常接近,这也是为什么我们常常看到有文章把内部匿名类称为闭包。
为什么我说不是100%?匿名内部类职能获取被声明为final的局部变量。因为这个限制,java中的内部匿名类不是闭包。
如果你记得《memory menagement in java》这个文章,你可能记得局部变量是保存在栈中的。
这些栈在方法调用时创建,在方法返回时销毁。不同于局部变量,final类型的变量当方法返回后,也是保存的。
如果我们想把一个匿名类转化成闭包,我们应该允许它访问它周围的变量。但是根据目前的内存管理策略,当方法返回后,这些变量就不能再获得了。
java中的闭包
那么,我们将来会如何在java中实现闭包呢?Peter Ahe, James Gosling, Neal Gafter and Gilad Bracha写了一份关于闭包的说明。
它详细说明了如何在java中实现闭包,并用示例代码演示了如何使用闭包。
我们有一个实现闭包的JSR335,它名叫java中的lambda表达式。
分享到:
评论

相关推荐

    javascript闭包(Closure)用法实例简析

    1、什么是闭包 官方的回答:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 看了上面的定义,如果你不是高手,我坚信你会和我一样...

    基于三元闭包和会员闭包的社区发现算法研究 (2014年)

    社交网络即社交网络服务,源自英文 SNS(social network service)的翻译,社交网络有多种表现平台,比如QQ、微博、Facebook和微信。本文主要研究微博这一新兴的社交平台,研究微博的主要目的是搞清用户之间的种种关系...

    JavaScript闭包详解

    //妈蛋,E文本来就不好,找翻译才把闭包单词写出来 } fn(); 然后面试官摇摇头说道:“这怎么能叫闭包呢?”,最终两人争执不下,同事果断走人,面试官什么玩意儿?(本故事纯属虚构,如有雷同纯属巧合) 闭包可

    【JavaScript源代码】怎样用Javascript实现函数柯里化与反柯里化.docx

    下面来一起看看究竟什么是函数柯里化: 维基百科的解释是:把接收多个参数的函数变换成接收一个单一参数(最初函数的第一个参数)的函数,并返回接受剩余的参数而且返回结果的新函数的技术。其由数学家Haskell ...

    5个可以帮你理解JavaScript核心闭包和作用域的小例子

    主要介绍了5个可以帮你理解JavaScript核心闭包和作用域的小例子,本文是翻译自国外的一篇文章,短小精悍,需要的朋友可以参考下

    javascript实现函数柯里化与反柯里化过程解析

    下面来一起看看究竟什么是函数柯里化: 维基百科的解释是:把接收多个参数的函数变换成接收一个单一参数(最初函数的第一个参数)的函数,并返回接受剩余的参数而且返回结果的新函数的技术。其由数学家Haskell ...

    领域特定语言(Domain Specific Languages)

     全书共57章,分为六个部分:第一部分介绍了什么是dsl,dsl的用途,如何实现外部ds和内部dsl,如何生成代码,语言工作台的使用方法;第二部分介绍了各种dsl,分别讲述了语义模型、符号表、语境变量、构造型生成器、...

    领域特定语言

    , 全书共57章,分为六个部分:第一部分介绍了什么是DSL,DSL的用途,如何实现外部DS和内部DSL,如何生成代码,语言工作台的使用方法;第二部分介绍了各种DSL,分别讲述了语义模型、符号表、语境变量、构造型生成器、...

    《领域特定语言》(Martin Fowler,Domain-Specific Languages)迷你书

    全书共57章,分为六个部分:第一部分介绍了什么是DSL,DSL的用途,如何实现外部DS和内部DSL,如何生成代码,语言工作台的使用方法;第二部分介绍了各种DSL,分别讲述了语义模型、符号表、语境变量、构造型生成器、宏...

    groovy-官网翻译.docx

     支持函数编程、闭包等语法,代码更易于阅读和维护  对OO(面向对象编程)和Ant DSL 支持更好,在语法层面支持编写、编译shell脚本  减少结构性代码。开发web/GUI/Console程序,效率更高  简化单元testing ...

    pixel-styler:图像到图像翻译的简洁实现

    这是用于图像到图像翻译的的简洁重构版本。 更具可读性和可重用性。 使用具有定制功能闭包的抽象估计器。 在训练过程中使用TensorBoard可视化scalar和image 。 先决条件 Python 3.6+ PyTorch> = 0.3且...

    编译原理试卷21

    1.编译程序是一个语言翻译程序,它把源语言书写的程序 2.编译过程的前端主要包括 , , 和 3.编译的“遍”是指 4.字符集合{a,b}的正闭包是:

    Python实现的Scheme方言SchemePy.zip

    所以保留了支持在浏览器中运行(翻译到JavaScript且不使用nodejs库的情况下)这也是对Scheme和编译原理的告别,到今天了也是编译原理图书馆借来后就一直没看最后还是还回学校了。不在停留在这里了。继续前进! ...

    javascript enlightenment

    这本书循序渐进的讲述了Js中的重要概念,一开始看起来可能会觉得有些无聊,觉得讲得太简单,但是越看越觉得有味道,越看越能体会到作者的用心之处,尤其是在讲述词法作用域以及闭包,绝对的深入浅出,完全没有看不懂...

    编译原理 东南大学 64讲 视频.txt

    3.集合论的推演: 主要是一些闭包运算之类,数学基础不好的话,学起来也会感到吃力. 4.LR文法: 主要是又引入了自动机 不管哪本编译教材,即使是绝对经典”龙书”也不例外,都要涉及到这几个难点.由于这些内容本身不好...

    tsickle:Tsickle — TypeScript 到 Closure 翻译器

    转换是什么意思 Tsickle 适用的各种转换的(非详尽)列表: 在函数/类/等上插入与闭包兼容的 JSDoc 注释 将 ES6 模块转换为goog.module模块 从 TypeScript d.ts 生成 externs.js(并declare ,见下文) 声明类成员...

    学用 JavaScript 设计模式.pdf

    外文翻译:学用JavaScript设计模式,pdf版本,中文版 设计模式是可重用的用于解决软件设计中一般问题的方案。设计模式如此让人着迷,以至在任何编程语言中都有对其进行的探索。 其中一个原因是它可以让我们站在巨人...

    编译原理总复习指导

    第1章:翻译程序与编译程序概念,编译过程、遍的概念,编译程序总体框架,如何构造编译程序; 第2章:语法规则,语义规则,闭包概念,上下文无关文法,最左(右)推导,文法类型; 第3章:词法分析的任务、功能,...

    JS 函数式编程指南

    我们不得不到处使用 bind 以免 this 不知不觉地变了,语言里没有类可以用(目前还没有),我们还发明了各种变通方法来应对忘记调用 new 关键字后的怪异行为,私有成员只能通过闭包(closure)才能实现,等等。...

Global site tag (gtag.js) - Google Analytics