13

函数式编程..就像经典(马克吐温的类型)。在阅读另一篇关于 SICP 的文章时,人们正在谈论关闭对那里的思考产生的巨大影响,我想起了这个,这是我很久以前读过的

闭包是穷人的对象 对象是穷人的闭包

(不记得确切的来源,但它是程序员罗塞塔石碑,或编程之禅,或编程的 tau ......谷歌变得如此拥挤,无法找到原始来源)

所以联合程序员......你的看法是什么......是你一直缺少的东西......或者只是一些语法糖,预处理器可以做!

4

5 回答 5

21

http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg03277.html

尊贵的 Qc Na 大师与他的学生 Anton 同行。安东希望能引起大师的讨论,道:“大师,我听说物件是一个很好的东西,这是真的吗?” Qc Na 怜悯地看着他的学生,回答说:“愚蠢的学生 - 对象只是一个穷人的闭包。”

受到责备后,安东离开了他的主人,回到了他的牢房,一心研究闭包。他仔细阅读了整个“Lambda: The Ultimate...”系列论文及其表亲,并实现了一个带有基于闭包的对象系统的小型 Scheme 解释器。他学到了很多,并期待着向他的主人通报他的进步。

在与 Qc Na 的下一次散步中,Anton 试图打动他的师父,他说:“师父,我已经认真研究了这件事,现在明白了物体确实是穷人的闭包。” Qc Na 用棍子击打 Anton 回应说:“你什么时候才能学会?闭包是穷人的对象。” 那一刻,安东顿悟了。

——安东·范·斯特拉滕

于 2009-02-01T15:59:36.120 回答
4

我在 Javascript 中使用闭包很长时间了。有时它们会形成一个“对象”,有时它们是向回调提供实例数据的有用方式。

就我而言,它们是盒子里另一个有用的工具,但它不仅仅是糖。Sugar 与您可以用另一种更复杂的语法合理地做的事情有关。用一种不直接支持闭包的语言实现闭包将非常困难。

于 2009-02-01T16:00:03.013 回答
3

闭包不仅仅是语法糖,尽管我认为它在某种程度上取决于您对“语法糖”的定义。

对我来说,Java 1.5 的 for-each 是语法糖,但是,例如,Ruby 块远不止于此。闭包提供了方便的抽象级别,这对于隐式声明意图很有用——这是朝着 DSL 语法迈出的一大步。

于 2009-02-01T15:56:44.767 回答
3

闭包和匿名块是非常重要的编程结构,我在 java、C++、C 和任何其他缺少它们的语言中都很快找到了它。它们对于异步和事件处理特别有用。它们还使获取函数的函数使用起来更加愉快,并提供了在不使用额外语法的情况下做更多事情的选择。(参见:smalltalk 和 scheme)

于 2009-02-01T16:07:37.927 回答
2

闭包就像 OO 语言中的对象。但是函数式语言缺乏子类型和继承。

于 2011-01-15T12:30:20.193 回答