Questions tagged «closures»

以原始词法范围绑定到引用环境的函数(通常是匿名的),如果在该范围之外执行,该函数仍然可以访问该环境(其变量和其他引用)。


5
Lambda表达式除了具有单个方法的匿名内部类之外,还具有其他功能吗?
期待已久的Java 8中的lambda表达式有了新的炒作;每三天有一篇关于他们有多酷的文章随他们出现。 据我了解,lambda表达式只不过是具有单个方法的匿名内部类(至少在字节码级别)。除此之外,它还具有另一个不错的功能-类型推断,但我相信可以在某种程度上使用泛型来实现这一点(当然不能像使用lambda表达式那样巧妙)。 知道了这一点,lambda表达式不仅会带来Java语法上的加糖功能吗?是否可以使用无法使用当前语言功能构建的lambda表达式来创建功能更强大,更灵活的类或其他面向对象的构造?

3
C#,Java和Scala的Closures / Lambdas /…方法的优缺点是什么?
我想知道C#和Scala之间在技术上的实现差异是什么,以及两种解决方案如何与布莱恩·格茨(Brian Goetz)发送给Project Lambda(JSR 335)邮件列表的Peek Past lambda电子邮件中表达的实现思想和关注点进行比较? 从电子邮件: 我们探索了“也许lambdas应该只是内部类实例,那真的很简单”之路,但最终走到了“函数是语言未来的更好方向”的位置。 并进一步: 世界的lambdas-are-objects视图与这个可能的未来冲突。对世界的lambda-are-functions视图并不了解,并且保留这​​种灵活性是不让lambda负担甚至带有客观性的负担的要点之一。 结论: Lambdas-are函数打开了大门。Lambdas-are-objects将它们关闭。 我们更希望看到那些门保持打开状态。 有人在Reddit主题上发表了一些评论: 我实际上通过电子邮件向Neal Gafter发送了电子邮件,由于我对他的解释的有限理解,C#和当前的Java设计非常相似,因为Delegates实际上是对象而不是函数类型。似乎他认为Java应该从C#的lambda的缺点中学习并避免它们(就像C#从Java的缺点中获悉并在一开始就避免它们一样)。 为什么“ Lambdas-are-functions”方法比“ Lambdas-are-objects”在将来能提供更多的机会?有人可以解释存在什么差异以及它们如何影响代码的编写方式吗? 看到Scala中的事情“可行”,我一直在想,我缺少关于C#/ Java(8)中采用/提出的方法的某些东西,可能与对向后兼容性的关注有关吗?
30 c#  java  scala  lambda  closures 


1
Groovy是否遵循Tennent的通信原理?
这是对Tennent的通信原理的有趣讨论,以及Neal Gafter的简短描述: 该原理规定,将表达式或语句包装在闭包中然后立即调用时,其含义应与包装在闭包中之前的含义相同。在将代码包装在闭包中时,语义上的任何更改都可能是该语言的缺陷。 Groovy语言是否遵循此原则?

4
实现安全关闭是否需要垃圾收集?
我最近参加了有关编程语言的在线课程,其中介绍了闭包。我写下了两个受本课程启发的示例,以便在提出问题之前提供一些背景信息。 第一个示例是一个SML函数,该函数生成从1到x的数字列表,其中x是该函数的参数: fun countup_from1 (x: int) = let fun count (from: int) = if from = x then from :: [] else from :: count (from + 1) in count 1 end 在SML REPL中: val countup_from1 = fn : int -> int list - countup_from1 5; val it = [1,2,3,4,5] …

4
Java中的闭包将如何影响Java社区?
它是为Java计划的最受关注的功能之一:闭包。我们许多人一直向往他们。我们中的某些人(包括我在内)变得有点急躁,并转向脚本语言来填补空白。 但是,一旦闭包最终到达Java:它们将如何影响Java社区?以VM为目标的脚本语言的发展是否会减慢爬行速度,保持不变或兼容?人们是否会蜂拥至新的闭包语法,从而将Java代码基础全面转换为功能更结构化的实现?我们会不会只看到Java中散布着闭包?对工具/ IDE支持的影响是什么?性能如何?最后,与其他越来越流行的语言相比,对于Java继续采用这种语言意味着什么? 为了提供最新提议的Java Closure语法规范之一的示例: public interface StringOperation { String invoke(String s); } // ... (new StringOperation() { public invoke(String s) { new StringBuilder(s).reverse().toString(); } }).invoke("abcd"); 会成为 ... String reversed = { String s => new StringBuilder(s).reverse().toString() }.invoke("abcd"); [来源:http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonymous_28.html]
11 java  closures 

3
具有副作用的封闭器是否被视为“功能样式”?
许多现代编程语言都支持某种闭包概念,即一段代码(一个块或一个函数) 可以被视为一个值,因此可以存储在变量中,传递给代码的不同部分,可以在一个程序的一部分中定义,并可以在同一程序的完全不同的部分中调用。 可以从定义它的上下文中捕获变量,并在以后调用它时访问它们(可能在完全不同的上下文中)。 这是用Scala编写的闭包示例: def filterList(xs: List[Int], lowerBound: Int): List[Int] = xs.filter(x => x >= lowerBound) 函数文字x => x >= lowerBound包含free变量lowerBound,该变量由filterList具有相同名称的函数的参数关闭(绑定)。该闭包将传递给library方法filter,该方法可以作为常规函数重复调用它。 我已经在该站点上阅读了很多问题和答案,据我所知,术语闭包通常会自动与函数式编程和函数式编程风格相关联。 维基百科上的函数编程的定义为: 在计算机科学中,函数式编程是一种编程范例,将计算视为对数学函数的评估,并避免了状态数据和可变数据。与强调状态变化的命令式编程风格相反,它强调函数的应用。 并进一步 在函数代码中,函数的输出值仅取决于输入到函数的参数。消除副作用可以使理解和预测程序的行为变得更加容易,这是开发函数式编程的主要动机之一。 另一方面,编程语言提供的许多闭包构造允许闭包捕获非局部变量并在调用闭包时对其进行更改,从而对定义它们的环境产生副作用。 在这种情况下,闭包实现了函数编程的第一个想法(函数是可以像其他值一样移动的一流实体),却忽略了第二个想法(避免了副作用)。 带有副作用的闭包的这种使用是否被视为功能样式,还是被视为可以用于功能性和非功能性编程样式的更通用的构造?是否有关于该主题的文献? 重要的提示 我不是在质疑副作用或关闭副作用的有用性。另外,我对讨论带或不带副作用的闭合的优缺点没有兴趣。 我只想知道函数编程的支持者是否仍将使用此类闭包视为函数样式,或者相反,在使用函数样式时不鼓励使用此类闭包。

3
为什么关于闭包的嗡嗡声如此之大?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以当前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 8年前关闭。 为什么在开发人员中关于关闭的讨论如此热闹?在我的职业生涯中,我虽然没有清楚地了解它们是什么,但从未故意使用它们。 UPD:仅作澄清。问题是,为什么封闭概念最近变得如此健谈。
9 closures 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.