问题标签 [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 投票
2 回答
451 浏览

java - Java中的匿名内部类有没有办法“失去”它们的范围?

当我将匿名内部类传递给函数时,我可以从该类的方法中引用当前范围内的变量,如下所示:

现在,在上面的 someMethod 运行之后,调用者和带有小匿名的队列可以分道扬镳,据我了解,JVM 保持所有引用正常,因此这始终有效。

但是,如果,例如,队列被序列化,程序关闭并重新启动,然后队列被反序列化并且其中的项目应该运行,而 Caller 实例早已消失并被遗忘,该怎么办?

还有其他方法可以让周围的对象和匿名内部类以一种在匿名类内部调用不再起作用的方式分离吗?

0 投票
3 回答
807 浏览

java - 是否有可序列化的标准闭包接口?

如果没有,也许你可以告诉我为什么。

当我的类被序列化时,我得到 NotSerializableException。

在类内部,我将这个匿名类传递给一个方法:

这个问题仍然没有答案。我想知道是否有实现 Serializable 的标准 Closure 接口

0 投票
2 回答
1562 浏览

language-design - 可变或不可变闭包

在命令式、面向对象的语言中,具有可变或不可变闭包是否更有意义?

例如:

如果闭包是可变的,这将打印:

如果它是不可变的,它将打印:

我意识到即使使用不可变的闭包,您仍然可以这样做:

那么,拥有可变闭包或不可变闭包会更好,还是两者都有选择?不可变闭包似乎更容易实现,所以在这一点上,我想我会继续这样做,除非有充分的理由不这样做。

0 投票
1 回答
1135 浏览

c# - 如何在 .NET 中实现匿名方法中捕获的值

我对实际的 .NET 实现及其背后的决定感到好奇。

例如,在 Java 中,匿名类中使用的所有捕获值都必须是最终值。.NET 中似乎取消了此要求。

此外,与引用类型相比,值类型的捕获值的实现是否存在差异?

谢谢

0 投票
44 回答
443643 浏览

javascript - 循环内的 JavaScript 闭包——简单实用的示例

它输出这个:

我的价值:3
我的价值:3
我的价值:3

而我希望它输出:

我的价值:0
我的价值:1
我的价值:2


当函数运行延迟是由使用事件监听器引起时,也会出现同样的问题:

… 或异步代码,例如使用 Promises:

for infor of循环中也很明显:

这个基本问题的解决方案是什么?

0 投票
3 回答
4244 浏览

groovy - 替换java内部类的最佳常规闭包习语?

作为 groovy 的新手...

我正在尝试替换事件侦听器、过滤器等的 java 习惯用法。

我在 groovy 中的工作代码如下:

现在,这与我在 java 中的习惯相去甚远,其中 Query 接口的实现是在 odb.getObjects() 方法中完成的。如果我在哪里编写“java”代码,我可能会执行以下操作,但它不起作用:

或者更好,我希望它是这样的:

但是,将“匹配”方法与外部脚本上下文相关联并让我失望的是什么groovy。

我发现 groovy... groovy 反正我会坚持学习更多。谢谢。


我应该问的是我们如何在 groovy 中做“匿名”类。这是java的成语:

groovy 可以在没有额外的类声明的情况下如此简洁吗?

0 投票
2 回答
770 浏览

c# - 闭包有什么特别之处?

我一直在阅读这篇关于闭包的文章,他们说:

  • “所有管道都是自动的”
  • 编译器“创建一个包装类”并“延长变量的寿命”
  • “您可以放心使用局部变量”
  • .NET 编译器会为您处理管道等问题。

所以我根据他们的代码做了一个例子,对我来说,似乎闭包的行为类似于常规命名方法,它们也“无忧无虑地处理局部变量”并且“所有管道都是自动的”。

或者这个“局部变量的包装”解决了什么问题使闭包如此特别/有趣/有用?

回答

所以这个问题的答案是阅读Jon Skeet 关于Marc 指出的闭包的文章。本文不仅展示了 C# 中 lambda 表达式的演变,还展示了 Java 中如何处理闭包,这是本主题的优秀读物。

0 投票
7 回答
30258 浏览

groovy - 如何从 groovy 闭包中返回并停止执行?

我想从闭包中返回,就像在循环中使用 break 语句一样。

例如:

在上面的 if 语句中,我想停止遍历列表并离开闭包以避免不必要的迭代。

我见过一个解决方案,其中在闭包内引发异常并在外部捕获,但我不太喜欢该解决方案。

除了更改代码以避免这种算法之外,是否有任何解决方案?

0 投票
6 回答
645 浏览

java - 使用 function-java 向 Java 生产项目添加闭包有多安全?

我很想在 Java 中使用闭包。我已经读到它们可能会或可能不会进入 Java 7。但是一个名为functional-java的开源项目已经实现了包括闭包在内的功能特性。

在企业生产应用程序中使用这样的库有多安全?

目前有没有更好的方法向 Java 添加闭包?

0 投票
4 回答
2804 浏览

closures - monad 和闭包有什么区别?

我有点困惑阅读两者之间的定义。它们实际上可以在定义方面相交吗?还是我完全迷路了?谢谢。