【发布时间】:2011-12-10 18:01:19
【问题描述】:
我的团队中有一位同事在我们使用 Delphi 开发的项目中广泛使用闭包。个人而言,我不喜欢这样,因为这会使代码更难阅读,而且我认为只有在需要时才应该使用闭包。
另一方面,我已经阅读了Can someone explain Anonymous methods to me? 和其他与此相关的链接,我考虑到可能我错了,所以我请你给我一些例子,什么时候更好使用闭包而不是“老式”方法(不使用闭包)。
【问题讨论】:
-
主要问题是变量捕获和产生的生命周期变化。可能会产生一些相当意想不到的效果,尤其是当您在同一范围内定义了多个共享变量捕获的匿名方法时。我通常会避免使用匿名方法,除非它们使代码更清晰、更简单。
-
匿名方法属于函数式编程范式。它们在命令式 Delphi 环境中相当陌生,与函数式语言相比价值非常有限。
-
例如查看 OmniThreadLibrary - 我喜欢 Gabriel 使用闭包的方式...
-
Lambdae 被添加到 Delphi 只是因为“每个人都有它们,而我们没有”并且没有 Heilsberg 可以对它们进行一些讨论。它违背了 Pascal 范式,自然会导致严重的语言丑化(同时也违反基本的 Pascal 括号语法)
-
我强烈反对 Serg。我了解 Python 和 Delphi,并且我认识到 Delphi 中较长的语法是强类型的必要副作用。动态类型和 lambdas 是一个很好的匹配,但是 lambdas/闭包在强类型语言(如 C++)和 Pascal 中很有价值,就像在 Python 中一样。除了特征(通过接口实现)之外,实际上还有一些强大的方法可以使静态类型系统从 Lambdas 中受益,甚至比 Python 中的还要多,因为在 Python 中,您只需使用动态语言技巧就可以完成很多 lambda 技巧.
标签: delphi closures anonymous-methods