我想了解封闭,但字面上每封闭的定义,我可以找到使用相同的含糊不清的短语:“关闭”。这是什么意思“关闭”的东西?
什么是关闭? “哦,这是一个函数,关闭了其他功能。”
但无处我能找到的东西“关闭了”的意思的定义。有人能解释什么事情是什么意思让事情A“关闭”事情B?
我想了解封闭,但字面上每封闭的定义,我可以找到使用相同的含糊不清的短语:“关闭”。这是什么意思“关闭”的东西?
什么是关闭? “哦,这是一个函数,关闭了其他功能。”
但无处我能找到的东西“关闭了”的意思的定义。有人能解释什么事情是什么意思让事情A“关闭”事情B?
闭包是由一个代码指针和一个环境指针组成的一对。环境指针包含给定函数的所有自由变量。例如:
fun f(a, b) =
let fun g(c, d) = a + b + c + d
in g end
val g = f(1, 2)
val result = g(3, 4) (*should be 10*)
功能g
包含两个自由变量:a
和b
。如果您对“自由变量”这个术语不熟悉,则它是一个未在函数范围内定义的变量。在这种情况下,关闭东西,意味着从函数中删除任何发生的自由变量。上面的例子为闭包提供了很好的动力。当函数f
返回时,我们需要能够记住以后的a
和b
的值。这是编译的方法,是治疗功能g
作为代码指针,包含了所有的自由变量,如记录:
fun g(c, d, env) = env.a + env.b + c + d
fun f(a, b, env) = (g, {a = a, b = b})
val (g, gEnv) = f(1, 2)
val result = g(3, 4, gEnv)
当我们应用功能g
,我们提供调用时所返回的环境功能f
。请注意,现在函数g
不再有任何未在其范围内定义的变量。我们通常称一个没有任何自由变量的术语,如已关闭。如果你还不清楚,马特强权在闭合转换的深度解释一个优秀的http://matt.might.net/articles/closure-conversion/
闭包是可以通过周围 并在代码中使用的功能自足块。 Swift中的闭包类似于C和Objective-C中的 以及其他编程语言中的lambda。
但这是什么意思?
这意味着封闭捕获的变量和在其所定义的上下文的常数,被称为闭过那些变量和常量。
我希望有帮助!
http://en.wikipedia.org/wiki/Closure_%28computer_programming%29#History_and_etymology - 给你一些开始。关闭“关闭”打开的绑定。 – Blorgbeard
LOL,“*封闭是通过打开的绑定关闭的东西。*”这可能会更不具描述性?!?真?!? **真的吗?!?!** – smeeb
如果那是我所说或所链接的任何内容的直接引用,那么你会有一个观点。下面是我链接到的内容:“一个lambda表达式,其开放绑定(自由变量)已被词法环境关闭(或绑定),导致了一个关闭的表达式或闭包”。 – Blorgbeard