functional-programming - "Closures are poor man' s 对象,反之亦然”-这是什么意思?

标签 functional-programming object oop closures

Closures are poor man's objects and vice versa.

我看过这个说法at many places在网络上( including SO ),但我不太明白它的含义。有人可以解释一下它的确切含义吗?

如果可能,请在您的答案中包含示例。

最佳答案

Objects are poor man's closures.

考虑 Java。 Java 是一种面向对象的编程语言,没有对真正的词法闭包的语言级别支持。作为一种解决方法,Java 程序员使用匿名内部类来关闭词法范围内可用的变量(前提是它们是final)。从这个意义上说,对象是穷人的闭包。

Closures are poor man's objects.

考虑 haskell 。 Haskell 是一种函数式语言,没有对真实对象的语言级别支持。然而,它们可以使用闭包进行建模,如 this 中所述。 Oleg Kiselyov 和 Ralf Lammel 的优秀论文。从这个意义上说,闭包是穷人的对象。

<小时/>

如果您有面向对象的背景,您可能会发现用对象来思考更自然,因此可能将它们视为比闭包更基本的概念。如果您有 FP 背景,您可能会发现闭包的思考更自然,因此可能将它们视为比对象更基本的概念。

这个故事的寓意是,闭包和对象是可以彼此表达的想法,没有一个比另一个更基本。这就是正在考虑的声明的全部内容。

在哲学中,这被称为model dependent realism .

关于functional-programming - "Closures are poor man' s 对象,反之亦然”-这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2497801/

相关文章:

function - Haskell 中与(高阶)函数的模式匹配

java - 如何在java中搜索对象数组然后更新对象的一部分?

python hasattr() 区分方法和属性

Java 8 通过签名推断方法引用解析,这是否损坏?

Scala 从 DSL 到函数的自然转换

javascript - 参数未通过两级 JavaScript 构造函数传递

javascript - 对象中的条件变量

javascript - 类型错误 : cannot read property variable of null of a method

java - 默认情况下,任何类都扩展 Object 类。不是说java支持多重继承吗?

Python 和函数式编程 : is there an apply() function?