- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有人愿意为像这样的闭包(使用 C# 获得)和匿名内部类发布等效的 Java 代码?
public static Func<int, int> IncrementByN()
{
int n = 0; // n is local to the method
Func<int, int> increment = delegate(int x)
{
n++;
return x + n;
};
return increment;
}
static void Main(string[] args)
{
var v = IncrementByN();
Console.WriteLine(v(5)); // output 6
Console.WriteLine(v(6)); // output 8
}
此外,如果词法闭包可用,谁能解释如何获得部分应用,反之亦然?对于第二个问题,C# 将不胜感激,但这是您的选择。非常感谢。
最佳答案
Java 中还没有闭包。 Lambda 表达式即将出现在 Java 8 中。但是,您尝试翻译的唯一问题是它具有状态,我认为这不是 Lambda 表达式支持的东西。请记住,它实际上只是一种简写,以便您可以轻松实现单一方法接口(interface)。但是我相信你仍然可以模拟这个:
final AtomicInteger n = new AtomicInteger(0);
IncrementByN v = (int x) -> x + n.incrementAndGet();
System.out.println(v.increment(5));
System.out.println(v.increment(6));
不过我还没有测试过这段代码,它只是作为一个例子,说明在 Java 8 中可能会发生什么。
想想集合 api。假设他们有这个界面:
public interface CollectionMapper<S,T> {
public T map(S source);
}
还有一个关于 java.util.Collection 的方法:
public interface Collection<K> {
public <T> Collection<T> map(CollectionMapper<K,T> mapper);
}
现在,让我们看看没有闭包的情况:
Collection<Long> mapped = coll.map(new CollectionMapper<Foo,Long>() {
public Long map(Foo foo) {
return foo.getLong();
}
}
为什么不这样写:
Collection<Long> mapped = ...;
for (Foo foo : coll) {
mapped.add(foo.getLong());
}
更简洁吧?
现在介绍 lambda:
Collection<Long> mapped = coll.map( (Foo foo) -> foo.getLong() );
看看语法有多好?你也可以链接它(我们假设有一个接口(interface)来进行过滤,它返回 boolean 值以确定是否过滤掉一个值):
Collection<Long> mappedAndFiltered =
coll.map( (Foo foo) -> foo.getLong() )
.filter( (Long val) -> val.longValue() < 1000L );
关于c# - 闭包和 java 匿名内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11579249/
我的问题是...在 TestObj 的 CallMeLaterTestObj 函数中,“this”是窗口对象,而不是 TestObj。我如何重构它,以便在 CallMeLater 函数中我不必包装 c
这个问题已经有答案了: JavaScript closure inside loops – simple practical example (45 个回答) 已关闭 8 年前。 下面的代码返回:10
我尝试学习一种不熟悉的编程语言的第一件事就是它如何处理闭包。它们的语义通常与语言处理范围和其他各种棘手位的方式交织在一起,因此理解它们可以揭示该语言的其他几个方面。另外,闭包是一种非常强大的构造,并且
我正在学习使用闭包,但我不确定什么是适合我的情况的最佳方法。为了清楚起见,我编辑了我的代码,它包含虚拟代码。如果用户单击 test 元素,我必须访问 handleCannon 函数。如果我在 onlo
所以在 d3 中我想要一个函数数组 var data = [44,23]; var line = []; for (var i = 0; i < data.length; i++) { lin
对于另一个闭包问题,我提前表示歉意,但我想澄清一下我对闭包在 JavaScript 中的实现方式的理解。 考虑以下代码: 01 'use strict'; 02 function foo() {} 0
闭包是我在 JS 中仍然没有完全掌握的东西。我认为这是一个关闭问题。我正在尝试创建一个进度条。每 x 秒我想增加一个 DIV 的宽度。这是应该执行此操作的部分: for(i=0;i<=counter;
我以为我对 JavaScript 中的 this 对象有了合理的理解。在处理对象、回调以及事件和处理程序时,我从远古以来就没有遇到过问题。然而,现在一切都变了。 我已经爱上了 JavaScript。纯
我创建的对象有问题,看起来像这样: var myObject = { AddChildRowEvents: function(row, p2) { if(document.at
我正在制作一个 DOM 生成器,我已经成功地工作了,但现在我正在尝试分配一些速记函数,以便 div() -> e("div") 这是我的代码: //assign these objects to a
有没有人愿意为像这样的闭包(使用 C# 获得)和匿名内部类发布等效的 Java 代码? public static Func IncrementByN() { int
我在控制台中运行此命令来查找结果的值,但我对为什么它是 122 感到困惑。我无法弄清楚为什么,也无法弄清楚在代码中如何使用奖金。有人可以解释一下奖金的值(value)以及他们如何获得开头声明的每个变量
以下代码定义了两个函数:lines 和 circles,它们返回一个函数 f 和 g分别。函数 f 和 g 相等(() -> size)只是为了简单起见,但通常它们是变量 的不同函数>尺寸。 line
function sampleDelay(delay) { return function(functionArray) { var count = 0; var func
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: What is the difference between a 'closure' and a 'lambda'?
我正在尝试弄清楚 std::function 与闭包结合使用时发生了什么。我还不能全神贯注,例如:正在调用什么构造函数?任何人都可以发布一个工作示例来替换 std::function 以支持以下示例中
闭包通过引用(而不是值)存储它们的外部变量。但是,在下面的代码中,我想按值存储。谁能告诉我如何使用 IIFE 做到这一点? var i = -1; var f = function () {
我刚刚开始学习函数指针,当我阅读关于该主题的 K&R 章节时,第一个让我印象深刻的是,“嘿,这有点像闭包。”我知道这个假设在某种程度上是根本错误的,在网上搜索后,我没有找到任何关于这种比较的分析。 那
我的理解是,Java(以及 Clojure)中使用的默认 ClassLoader 持有指向任何创建的匿名类的指针,因此,持有 lambdas 和闭包。这些是 从不 垃圾收集,因此代表“内存泄漏”。有一
我很抱歉这个不那么具体的标题,因为我的英语不够好,无法在标题中清楚地描述这种情况。 我有这样的代码: var e = document.getElementsByClassName( "test" )
我是一名优秀的程序员,十分优秀!