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

Dem*_*nes 6 scheme closures racket

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

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

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

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

Lif*_*ang 3

  1. 我相信在你给出的例子中,val不会等于10,相反,一个lambda对象(lambda () 10)将被分配给val。所以(val)等于10。

  2. 在Scheme的世界里,有两个不同的概念共享同一个术语“闭包”。请参阅这篇文章,了解这两个术语的简要介绍。就你而言,我相信“封闭”是指“词汇封闭”。在您的代码示例中,参数x是返回的 lambda 的自由变量,并由返回的 lambda 引用,因此保留词法闭包来存储 x 的值。我相信这篇文章会给你一个很好的解释什么是(词汇)闭包。