关闭GO和局部变量

时间:2013-07-24 09:46:19

标签: c++ go

我在http://en.wikipedia.org/wiki/Closure_(computer_science)

找到了以下定义
  

在编程语言中,闭包(也是词法闭包或函数   closure)是一个函数或函数的引用   引用环境 - 一个存储对每个引用的表   非局部变量(也称为自由变量或upvalues)   功能。[1]一个闭包 - 不像一个普通的函数指针 - 允许一个   函数来访问那些非局部变量,即使在外部调用时也是如此   其直接的词汇范围。

所有场合都是如此吗?不能lambda函数(那些创建一个闭包)继续裁判本地变量,当调用lambda时,该变量将超出范围?这不是GO的行为吗?


PS:我仍然想知道为什么他们使用“lambda”一词

为此得到了答案 https://cstheory.stackexchange.com/questions/18443/lambda-term-usage-in-programming


以下帖子可能对其他读者有帮助,

What is the difference between a 'closure' and a 'lambda'?

1 个答案:

答案 0 :(得分:3)

引用Go language specification

  

功能文字

     

函数文字表示匿名函数。

FunctionLit = "func" Function .
func(a, b int, z float64) bool { return a*b < int(z) }
  

函数文字可以分配给变量或直接调用。

f := func(x, y int) int { return x + y }
func(ch chan int) { ch <- ACK }(replyChan)
  

函数文字是闭包:它们可以引用周围函数中定义的变量。然后,这些变量在周围函数和函数文本之间共享,只要它们可以访问,它们就会存在。

所以是的,在Go中,闭包保证可以访问定义函数文字的范围内可见的任何变量。 Go编译器识别范围中的“捕获”变量并强制它们到堆而不是定义上下文堆栈(如果有的话)也可以有TLD [顶级声明]闭包。)