在Lua中实现关闭?

时间:2011-10-15 23:43:37

标签: lua closures implementation

我对如何实现闭包有疑问。

假设这是在名为test.lua的文件中:

local a = 'asdf'

local function b()
    return a
end

a = 10

return b

另一个文件

a = require 'test'
a()

它会打印

10

如果a是堆栈上的指针'asdf'(在我假设的堆上,但没关系),并且创建了闭包b,大概就是地址a中的b保存用于a = 10b如何更改闭包内的指针?

维基百科很好地说了令我困惑的事情:

  

如果语言实现的运行时内存模型在线性堆栈 1 上分配所有局部变量,则它无法轻松支持完全闭包。在这些语言中,函数返回时会释放函数的局部变量。

我在想,或许'asdf'确实没有保存指向a的指针,而是将堆栈偏移量保存到a,以便您可以更改a和堆栈offset会让你到a,它指向你设置a的最后一件事,但是当{{1}}(指针)从堆栈中弹出并且堆栈偏移时,这是如何工作的变得无效?

1 我知道Lua没有在堆栈上分配,但是它将堆栈上的本地指针分配给堆中的值,不是吗?

1 个答案:

答案 0 :(得分:21)