为什么关于闭包的嗡嗡声如此之大?[关闭]


9

为什么在开发人员中关于关闭的讨论如此热闹?在我的职业生涯中,我虽然没有清楚地了解它们是什么,但从未故意使用它们。

UPD:仅作澄清。问题是,为什么封闭概念最近变得如此健谈。


3
您将如何有意地使用一些您不知道它是什么的东西?因此,基本上,您首先应该问(或搜索)什么是闭包。
史蒂文·杰里斯

1
您是否阅读了维基百科的文章?您对此有什么不了解?
凯文·克莱恩

2
您的职业是基于什么?

4
这是什么问题?什么是“嗡嗡声”?你不懂什么 你为什么不问这个问题呢?
亚伦诺特,2011年

4
为了捍卫OP,关闭是一个古老的概念,但直到最近,它们才成为该镇的话题。对于学习过一点数学的任何人来说,这个概念确实非常简单,我也无法理解为什么人们谈论它们时好像很难理解。也许这只是使自己看起来更聪明的一种方式:“看,我抓紧那些很难抓到的盖子,所以我会摇晃”。
quant_dev

Answers:


22

闭包是一种代码,它可以记住它来自的世界,而在被带到的地方仍然可以使用。

一个示例是在Java中定义一个匿名函数,该函数知道它在YourObject中,并且可以操纵其方法和函数。然后,此函数将传递到Swing,例如它深入到Listener之类的内部,但仍然具有生命线。

这是一个非常强大的概念,因为它使您可以交付代码(对于使用它的代码而言,这是未知的),它可以返回到代码的其他部分。


1
是。这是一种不仅将过程,而且将状态注入其他代码的方法。这在设计算法时具有很高的灵活性。您可以设计依赖于状态子例程的模板化方法,而这些子例程在编译时可能甚至不知道。不利的一面是,在没有使用方法知道的情况下,可能会断开与该方法的原始源的链接,从而断开状态。发生这种情况时,您会发现难以发现的运行时错误。
KeithS 2011年

1
哈哈,Java中的匿名函数...好笑。
配置器

1
@configurator,不好笑,是事实。


Java 7没有闭包。

6

封闭只是一种以优雅的方式解决各种问题的方法。实际上,在不存在闭包的编程语言中,创建了实现类似功能的技术。

试想一下C ++中的函子或Java中的Runnables。它们只是允许类似于闭包功能的技术。某种“手动关闭”。

由于闭包已集成到流行的语言中,因此闭包变得越来越流行:由于在线应用程序(例如google doc),Java语言正在增长,C#实现了它,PHP从5.3开始实现了它,等等。

既然越来越多的技术提供了闭包,那么越来越多的人对它们感兴趣就变得很简单。

那么现在,什么是闭包?这很简单。闭包是一个函数以及在其中执行它的上下文。将其作为对象进行操作。为什么这有用?将自己的代码挂接到现有代码中很有用。

这是两种常见情况,它们要求:当动作由另一段代码管理时,例如在带有线程池的多线程中,或者当动作必须在选择的事件上执行时(通常在UI的JavaScript中使用)。


我清楚了解你吗?有一些“手动闭包”(不是真正的闭包,而是类似于它们的行为),还有一些“ TRUE闭包”吗?

封闭是一种语言能力。某些语言没有该功能,因此您可以使用该语言提供的工具手动关闭。恕我直言,说出它们是否正确并不是一个很有趣的辩论。
deadalnix 2011年

2
@gasan,您可以随时使用汇编程序并使用大量的GOTO语句手动执行所需的任何模式。同样,您可以使用“ while”循环(在C ++中)手动执行“ for”循环。更高级别的更高级别提供了一种处理普通事情的标准化方法。
菲利普(Philip)

6

前几天,我看到了一个有趣的报价,它的意思是“类是带有函数的数据。闭包是带有数据的函数”。

是的,这是一个过分的简化,但有助于理解要点。


+1看到关闭的好方法:D
deadalnix
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.