您的位置:首页 > 编程语言 > Lua

Lua upvalue definition

2014-07-23 12:20 489 查看
Lua is a lexically scoped language.The scope of a local variable begins at the first statement afterits declaration and lasts until the last non-void statementof the innermost block that includes the declaration.Consider the following example:

x = 10                -- global variable
do                    -- new block
local x = x         -- new 'x', with value 10
print(x)            --> 10
x = x+1
do                  -- another block
local x = x+1     -- another 'x'
print(x)          --> 12
end
print(x)            --> 11
end
print(x)              --> 10  (the global one)

Notice that, in a declaration like
local x = x
,the new
x
being declared is not in scope yet,and so the second
x
refers to the outside variable.

Because of the lexical scoping rules,local variables can be freely accessed by functionsdefined inside their scope.A local variable used by an inner function is calledan
upvalue, or external local variable,inside the inner function.

Notice that each execution of a local statementdefines new local variables.Consider the following example:

a = {}
local x = 20
for i=1,10 do
local y = 0
a[i] = function () y=y+1; return x+y end
end

The loop creates ten closures(that is, ten instances of the anonymous function).Each of these closures uses a different
y
variable,while all of them share the same
x
.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: