问题标签 [closures]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
28592 浏览

php - PHP 中的闭包...它们究竟是什么以及何时需要使用它们?

所以我正在以一种不错的、最新的、面向对象的方式进行编程。我经常使用 PHP 实现的 OOP 的各个方面,但我想知道什么时候需要使用闭包。有没有专家可以阐明何时实施闭包有用?

0 投票
3 回答
11807 浏览

c# - 带委托的局部变量

显然不是一个最佳实践。有人可以解释为什么这不是最佳实践或它是如何工作的吗?任何提供解释的书籍或文章将不胜感激。

输出的值是第二个值"Modified"。编译器魔术的哪一部分使这项工作起作用?这就像跟踪堆上的值并稍后再次检索它一样简单吗?

[编辑]:鉴于一些评论,改变原句一些......

0 投票
2 回答
328 浏览

java - 如何在标准 Mac JDK6 上使用 BGGA 闭包原型?

我正在尝试将BGGA 闭包原型与现有的 JDK 6(Mac OS X Leopard 上的标准)一起使用。我正在编译的示例代码来自 BGGA 教程:

我尝试了以下方法,但没有任何工作:

  1. 将closures.jar 复制到/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib
  2. 使用 -Xbootclasspath/a:/path/to/closures.jar 运行 javac
  3. 使用 -J-Xbootclasspath/a:/path/to/closures.jar 运行 javac
  4. 通过定义我自己的系统库并使用 BGGA 的代码将其附加到我的项目中,从 eclipse ganymede 中进行了尝试。

在所有四种情况下,我都得到了编译错误,表明编译器没有在引导类路径上选择closures.jar。我真的很想从 eclipse 或至少 maven 中得到这个工作。谢谢!

0 投票
9 回答
9869 浏览

actionscript-3 - ActionScript 3.0 为事件处理程序使用闭包

我试过这样做:

它确实添加了事件侦听器。我喜欢使用闭包,因为它们在这种情况下工作得很好,

但是,删除事件侦听器需要对原始函数的引用,并且由于我使用了匿名闭包,因此它不起作用,我尝试了:

也:

我发现它起作用的唯一方法是放弃匿名闭包并将事件侦听器指向预先存在的函数:

有谁知道一种方法可以为事件处理程序使用匿名闭包,同时仍然保留删除它们的能力?

0 投票
6 回答
6861 浏览

delegates - 你能解释一下 lambda 表达式吗?

我并没有真正得到lambda 表达式。虽然它们从 ALGOL 时代就已经存在,但直到最近 Python 和 Ruby 变得非常流行时,我才开始听说它们。现在 C# 有了=>语法,我的世界 (.NET) 中的人们越来越多地谈论 lamdba 表达式。

我已阅读有关 lambda 演算的 Wikipedia 文章,但我并不是真正的数学专家。从实际的角度来看,我并没有真正理解它。我什么时候使用 lambda 表达式?为什么?我怎么知道这是我应该做的?

您能否以前后格式展示如何解决 lambda 表达式问题的示例?任何命令式语言都可以,但 C# 对我来说最容易理解。

0 投票
2 回答
643 浏览

java - BGGA 闭包作为 Java 的附加解决方案?

昨天@headius / Charles Nutter 在推特上提出了一个非常有趣的想法:

@danny_l Gafter 犯了同样的错误;我并不是说分叉的 Java,就像 Groovy 是分叉一样。我想要一个带有闭包的“主要是Java”。

或@danny_l / Danny Lagrouw 的回复:

@headius 或者 BGGA 原型是否可以“绑定”任何未来版本的 Java?这可能有用

这也是我真正希望看到的。难道我们不能有某种字节码预处理器来使 BGGA 原型在任何现代 Java 版本上工作吗?我的意思是 scala、Groovy 和 JRuby 有闭包并产生有效的字节码!

我什至愿意帮助并为此付出努力。虽然我真的不知道从哪里开始。

(以上是我写的关于这个话题的文的节选)

其他人如何看待这个想法?

0 投票
6 回答
44370 浏览

groovy - 在 Groovy 闭包中模拟“继续”的最佳模式

似乎 Groovy 不支持breakcontinuefrom 闭包。模拟这种情况的最佳方法是什么?

0 投票
12 回答
36801 浏览

c - 函数指针、闭包和 Lambda

我刚刚开始学习函数指针,当我阅读有关该主题的 K&R 章节时,我首先想到的是,“嘿,这有点像一个闭包。” 我知道这个假设在某种程度上是根本错误的,在网上搜索后,我并没有发现任何对这种比较的分析。

那么为什么 C 风格的函数指针与闭包或 lambda 完全不同呢?据我所知,这与函数指针仍然指向已定义(命名)函数的事实有关,而不是匿名定义函数的做法。

为什么将函数传递给在第二种情况下被视为更强大的函数,在这种情况下,它没有命名,而不是在第一种情况下,它只是一个普通的,正在传递的日常函数?

请告诉我如何以及为什么将两者如此密切地比较是错误的。

谢谢。

0 投票
3 回答
2596 浏览

javascript - JavaScript - 我如何了解“闭包”的用法?

来自维基百科,免费的百科全书:闭包(计算机科学)

在计算机科学中,闭包是在包含一个或多个绑定变量的环境中评估的函数。调用时,该函数可以访问这些变量。闭包的显式使用与函数式编程以及 ML 和 Lisp 等语言相关联。其他语言中的对象等构造也可以用闭包来建模。

要在 JavaScript 中使用它,有人可以给我举个例子来说明它是如何应用的吗?

0 投票
5 回答
988 浏览

lisp - 从 s 表达式创建 lambda

我有一个 s 表达式绑定到 Common Lisp 中的一个变量:

现在我想创建一个函数,当调用它时,它会在定义它的范围内评估表达式。我试过这个:

但这两者都会产生一个问题:EVAL 将在顶层评估代码,因此我无法捕获表达式中包含的变量。请注意,我不能将 LET 表单放入 EVAL。有什么解决办法吗?

编辑:所以如果没有解决 EVAL 问题,还能怎么做?

编辑:有一个关于我到底想做什么的问题。我正在编写一个编译器。我想接受在定义表达式的词法环境中关闭变量的 s 表达式。将它写成宏可能确实更好。