闭包和传统课程有什么区别?

Seb*_*oli 9 language-agnostic oop closures functional-programming

关闭类的闭包有哪些优缺点,反之亦然?

编辑:正如Faisal用户所说,闭包和类都可以用来"描述维护和操纵状态的实体",因此闭包提供了一种使用函数语言以面向对象的方式编程的方法.像大多数程序员一样,我对类更熟悉.

这个问题的目的不是打开另一场关于编程范式更好的火焰战争,或者封闭和阶级是完全等同的,还是穷人的另一个.

我想知道的是,如果有人发现一种情况,一种方法真正击败另一种,以及为什么.

cla*_*cke 11

在功能上,闭包和对象是等价的.闭包可以模拟对象,反之亦然.那么你使用哪一个是语法方便的问题,或者你的编程语言最能处理的问题.

在C++中,闭包在语法上是不可用的,所以你不得不使用"仿函数",它们是覆盖的对象,operator()可以以看起来像函数调用的方式调用.

在Java中,你甚至没有编写器,所以你会得到像访问者模式这样的东西,它只是支持闭包的语言中的高阶函数.

在标准Scheme中,您没有对象,因此有时您最终通过使用dispatch函数编写闭包来实现它们,根据传入的参数执行不同的子闭包.

在像Python这样的语言中,其语法包含仿函数和闭包,它基本上是一种品味问题,你觉得这是表达你所做事情的更好方式.

就个人而言,我会说,在任何具有两种语法的语言中,闭包都是一种用一种方法表达对象的更加清晰和干净的方式.反之亦然,如果你的闭包开始根据传入的参数处理调度到子闭包,你可能应该使用一个对象.