这是lua里的两个概念,今天才理解。
所谓闭包 ,简单地理解,它其实是一个函数,不过它访问了另外一个函数词法作用域中的变量。
local function foo()
local i = 1
local function bar()
i = i + 1 print(i)
end
return bar
end
local fn = foo()
print(fn()) -- 2
bar函数中引用了foo里的i变量,所以bar是一个闭包。
所有的lua函数可以说都是一个闭包,因为lua在编译之后,会在外围加上一层main函数,使得所有的函数都成了嵌套函数。
upvalue可以理解为上面的值,就是另一个词法作用域的变量,上面代码中的 bar()函数里的i就是upvalue
一个函数的局部变量和upvalue都有上限,默认是250和60,所以对于只在某个函数里使用的变量,就仅在该函数定义就好
网友评论