我花了一个小时阅读这个网站上的许多帖子以及其他关于 lambda 和闭包的帖子。我想我理解它们是什么,即它们是如何工作的,但我不明白它们为什么存在。我看到的许多例子都含糊地提到了它们的“力量”,但在每一种情况下,我都能想到一种更简单的方法来完成所说明的事情。也许这是由于示例故意过于简单(为了便于理解),或者我可能很密集。但我真正想要的是看到一个清晰的例子,说明你可以用闭包或 lambda 来完成你做不到的事情无一完成。也许这是一个很复杂的问题,因为所有编程范式最终都归结为相同的机器指令,并且可以用一种语言完成的任何事情都可以以某种方式用另一种语言完成。所以我想我真正要问的是一个用闭包做的事情的例子,它比没有做的更优雅(我见过的任何例子似乎都不是这种情况)。
这就是我要说的。
什么是“关闭”?,Scheme中的一个例子:
(define (make-counter)
(let ((count 0))
(lambda ()
(set! count (+ count 1))
count)))
(define x (make-counter))
(x) returns 1
(x) returns 2
...etc...
我真的不知道Scheme,但我想我知道发生了什么。但是,这不是更直接并完成同样的事情吗?伪代码:
function incrementCount(var counter) {
counter++;
return counter;
}
counter = 1;
counter = incrementCount(counter);
counter = incrementCount(counter);
这是关于 lambdas 的另一个:什么是 lambda(函数)?
给出的 JavaScript 示例:
var adder = function (x) {
return function (y) {
return x + y;
};
};
add5 = adder(5);
add5(1) == 6
再说一遍,为什么要那样做?为什么不直接说:
function adder(x, y) {
return x + y;
}
adder(5, 1);
我看到的每个示例似乎都是一种过于复杂的方法,可以用基本功能轻松完成。这些例子当然不能说明我能看到的任何惊人的酷“力量”。所以请有人启发我,我一定错过了一些东西。谢谢。