例如,我可能想做这样的作业(在JavaScript中):
var x = (function () {
// do some searching/calculating
return 12345;
})();
在Java中,我如何使用Lambdas做类似的事情?编译器不喜欢这样的东西:
Item similarItem = () -> {
for (Item i : POSSIBLE_ITEMS) {
if (i.name.equals(this.name)) return i;
}
return null;
}();
否,因为lambda需要目标类型。您所能做的就是投射表达式:
Item similarItem = ((Supplier<Item>) (() -> {
for (Item i : POSSIBLE_ITEMS) {
if (i.name.equals(this.name)) return i;
}
return null;
})).get();
您必须为您的特定lambda使用正确的功能接口。如您所见,它非常笨重且没有用。
更新
以上代码是JavaScript代码的直接翻译。然而,直接转换代码并不总是能得到最佳结果。
在Java中,您实际上会使用流来完成代码的工作:
Item similarItem = POSSIBLE_ITEMS.stream()
.filter(i -> i.name.equals(this.name))
.findFirst()
.orElse(null);
上述代码假设可能的_项是一个集合,很可能是一个列表。如果它是一个数组,请改用它:
Item similarItem = Arrays.stream(POSSIBLE_ITEMS)
.filter(i -> i.name.equals(this.name))
.findFirst()
.orElse(null);
问题内容: 例如,我可能想进行如下分配(在JavaScript中): 在Java中,如何使用Lambdas做类似的事情?编译器不喜欢这样的东西: 问题答案: 否,因为Lambda需要目标类型。您所能做的最好是将表达式转换为: 您必须为特定的lambda使用正确的功能接口。如您所见,它非常笨拙,没有用。 更新 上面的代码是JavaScript代码的直接翻译。但是,直接转换代码并不能总是获得最佳结果。
问题内容: 在JavaScript中,您可以定义立即执行的匿名函数: 您可以在PHP中做类似的事情吗? 问题答案: 对于PHP7:请参阅OhgakiYasuo的答案: 对于以前的版本:我能想到的立即执行它们的唯一方法是
php版本: 5.4 我定义了一个这样的函数 输出是 如何在的正文中引用。
前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行。 在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法也不一定完全对,主要是看个人如何理解,因为有的人说立即调用,有的人说自动执行,所以你完全可以按照你自己的理解来取一个名字,不过我听很多人都叫它为“自执行”,但作者后面说了很多,来说服大家称呼为“立即调用的函数表达式”。
问题内容: 有一个JSLint选项(实际上是The Good Parts之一),它“需要避免立即调用”,这意味着构造 而是需要写成 我的问题是-谁能解释为什么第二种形式可能会更好?它更具弹性吗?容易出错?与第一种形式相比,它有什么优势? 自问了这个问题之后,我开始理解在功能值和功能值之间进行清晰的视觉区分的重要性。考虑一下立即调用的结果在赋值表达式的右侧的情况: 尽管从语法上讲,最外面的括号不是必
为什么这在Node.js控制台(在4.1.1和5.3.0中测试)中工作,但在浏览器中不工作(在Chrome中测试)? 这个代码块应该创建并调用一个匿名函数,该函数记录。 另外,当上述操作在节点中工作时。js,这不起作用: 也不是这个: 奇怪的是,当添加参数时,它实际上会在立即调用的部分抛出一个。