相关疑难解决方法(0)

需要闭包或lambda的示例

我花了一个小时阅读这个网站上的很多帖子,其他人关于lambdas和closures.我想我明白它们是什么,即它们是如何工作的,但我不明白为什么它们存在.我看到的许多例子含糊地提到了他们的"权力",但在每一种情况下,我都能想到一种更简单的方法来完成所说明的内容.也许这是因为这些例子故意过于简单(为了便于理解),或者我可能很密集.但我真正喜欢的是看到一个明确的例子,说明你可以通过一个闭包或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...
Run Code Online (Sandbox Code Playgroud)

我真的不知道Scheme,但我想我知道发生了什么.但是,这不是更直接并且完成同样的事情吗?伪代码:

function incrementCount(var counter) {
    counter++;
    return counter;
}

counter = 1;
counter = incrementCount(counter);
counter = incrementCount(counter);
Run Code Online (Sandbox Code Playgroud)

是lambda上的另一个:什么是lambda(函数)?

给出的JavaScript示例:

var adder = function (x) {
    return function (y) {
        return x + y;
    };
};
add5 = adder(5);
add5(1) …
Run Code Online (Sandbox Code Playgroud)

lambda computer-science closures terminology

8
推荐指数
1
解决办法
687
查看次数

什么是lambda,什么是示例实现?

我对编程很新,在做很多阅读时,这个lambda的概念不断出现,但是我很难理解它实际上是什么,如何实现它将使我的编程生活变得更好.首先,什么是lambda,第二,它是如何实现的?

感谢所有发布的人.正如评论中提到的,这是重复的,但是这里有很多很棒的答案,我想为社区保留它们,所以我把它变成了一个社区帖子.以下是其他问题的链接:

什么是lambda(函数)?

lambda

6
推荐指数
4
解决办法
2503
查看次数

'闭锁'的定义

我问一个问题.它是关于JavaScript的闭包,而不是它们如何工作.

David Flanagan在他的"JavaScript The Definitive Guide 6th Edition"中写道:

... 从技术上讲,所有JavaScript函数都是闭包:它们是对象,并且它们具有与之关联的作用域链....

它是否正确?我可以将每个函数(函数对象+它的作用域)称为"闭包"吗?

堆栈'标签'封闭'说:

闭包是一个第一类函数,它引用(关闭)变量来自定义它的作用域.如果闭包在其定义范围结束后仍然存在,则它关闭的变量也将继续存在.

在JavaScript中,每个函数都引用来自定义它的范围的变量.所以,它仍然有效.

问题是: 为什么许多开发人员会这样想?这个理论有问题吗?它不能用作一般定义吗?

javascript closures

6
推荐指数
1
解决办法
198
查看次数

Scheme/Racket 中 Closures 的目的是什么?

我正在学习 Scheme,刚刚遇到了 Closures。提供了以下示例,演示了闭包的使用:

(define (create-closure x)
    (lambda () x))

(define val (create-closure 10))
Run Code Online (Sandbox Code Playgroud)

据我了解,当评估上述代码时,val将等于10. 我意识到这只是一个例子,但我不明白闭包会有什么帮助。有什么优点以及需要这样一个概念的场景是什么?

scheme closures racket

6
推荐指数
1
解决办法
5014
查看次数

闭包定义和示例

什么是封闭及其对应的例子?

我有很多研究,无法理解.请在通用编程语言概念方面和特定的编程语言方面进行说明.

请帮忙.

谢谢.

closures

5
推荐指数
2
解决办法
1082
查看次数

介绍JDK 1.8的闭包 - Lambda项目

现有的内部类有什么问题,为什么内部类不能用于表示闭包?

目前,我将在这里发布一些资源入手.

首先,下面列出了什么是封闭的概述.它与语言无关.我建议阅读它关闭http://martinfowler.com/bliki/Closure.html

稍后加一点

[2007年1月]闭包的定义http://gafter.blogspot.com/2007/01/definition-of-closures.html

结束

[2011年12月] Lambda状态 http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html

[2007年10月]编程语言高级主题:Java闭包http://www.youtube.com/watch?v=0zVizaCOhME

[2011年1月4日] JSR 292善良:使用invokedynamic进行Lambda到SAM类型的转换http://weblogs.java.net/blog/forax/archive/2011/01/04/jsr-292-goodness-lambda-sam-type γ变换-使用-invokedynamic

java closures

5
推荐指数
1
解决办法
4673
查看次数

有人可以用现实世界的语言来定义闭包吗?

可能重复:
什么是'关闭'?

我越来越多地阅读关于闭包的内容,但从实际的角度来看,我并没有真正了解它.我阅读了维基百科页面,但它并没有真正清楚我的内容,因为我有更多的编程实践背景(自学)而不是计算机科学背景.如果这是一个冗长的问题,我道歉,因为我的初步搜索没有产生任何真正为我解答的东西.

编辑:感谢您指出我正确的方向!我之前已经清楚地回答过这个问题,所以我将结束这个问题.

closures

4
推荐指数
1
解决办法
1006
查看次数

为什么最后一个字符会反复打印?

我写了以下内容来动画div中的文本动画,但我找不到最后一个角色是如何重复打印的.

var textClass = $(".first-text");
var text = textClass.text();
textClass.text("");
for (var i in text) {
  $(textClass).animate({
    opacity: 0.25
  }, 200, function() {
    $(textClass).append(text.charAt(i));
  });
}
Run Code Online (Sandbox Code Playgroud)
p:not(:first-child) {
  display: none;
}

p {
  margin: 0 auto;
  font-size: 24px;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="animate-text">
  <p class="first-text">HTML</p><br>
</div>
Run Code Online (Sandbox Code Playgroud)

如果我尝试警告i或者的值text.charAt(i),我总是得到所需的输出,但是当我尝试在div中追加它时,我总是得到重复打印的相同的最后一个字母.我找不到我错的地方.我无法在逻辑中找到错误.

如果有人能够通过上述代码告诉我我的错误,我会很高兴听到它.

是我尝试此代码的小提琴的链接.

提前致谢.

html javascript jquery

4
推荐指数
1
解决办法
112
查看次数

为什么以下Scala函数被称为闭包?

对于以下问题:http://pastie.org/4825115,这是我的代码:http://pastie.org/private/n22zohyshn2ymqrbrb3g

def randList(len: Int, n: Int): List[Int] = len match {
  case 0 => List()
  case len => scala.util.Random.nextInt(n) :: randList(len-1, n)
}
Run Code Online (Sandbox Code Playgroud)

但我不知道为什么randList被称为闭包.

closures scala

3
推荐指数
1
解决办法
7873
查看次数

如果全局函数使用非局部变量,那么它是一个闭包是否正确?

我一直很困惑什么是 C++ 中的闭包。我读过这篇什么是“关闭”?但几乎所有答案都指的是 JavaScript,但我认为 C++ 和 JavaScript 之间的闭包存在一些差异。所以我发现很难将闭包的 JavaScript 描述与 C++ 相匹配。

例如,几乎所有答案都以函数返回函数为例来演示 JavaScript 中的闭包。但是我在 C++ 中没有找到类似的模式。

更重要的是,在 JavaScript 中没有所谓的“捕获列表”这样的东西。


  1. 有人告诉我,如果一个函数使用非局部变量(来自外部作用域或全局作用域),那么它就是一个闭包。这是正确的吗?

示例 1:

    int a = 3;

    int am_I_a_closure(int c){
        return c + a;
    }

    int main(){
    }
Run Code Online (Sandbox Code Playgroud)
  1. 为什么需要捕获列表?C++ 中的 lambda 不能像 JavaScript 嵌套函数一样工作吗?或者换句话说,C++ 中的 lambda 不能像访问全局(非局部)变量的全局函数一样工作吗?

我的意思是,通过正常的名称查找过程,如果在当前作用域中找不到名称,则在外部作用域中找到它,然后在更多外部作用域中找到它...

为什么需要捕获列表?为什么需要捕获外部作用域变量?不能通过正常的名称查找来完成吗?

示例 2:

int main(){
    int a = 3;
    {
        int b = 5;
        {
            int c = 4;
            {
                std::cout << a+b+c <<std::endl;
            }
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

示例 3: …

c++ lambda closures

2
推荐指数
1
解决办法
182
查看次数