【发布时间】:2013-08-26 02:02:39
【问题描述】:
使用这样的 lua 代码块:
local a, b
function fA ()
print(a)
function fB ()
print(b)
end
end
fA 究竟有多少上值,1 还是 2?
【问题讨论】:
标签: lua
使用这样的 lua 代码块:
local a, b
function fA ()
print(a)
function fB ()
print(b)
end
end
fA 究竟有多少上值,1 还是 2?
【问题讨论】:
标签: lua
根据定义,函数中使用的所有外部局部变量都算作上值。 如前所述,在 Lua 5.2 中,如果函数使用全局变量,则环境还有一个隐藏的上值。
您可能希望使用luac -l -l 读取为您的代码生成的字节码。
可能让您感到困惑的是fB 在fA 的正文中的定义。回想起那个
function fB () print(b) end 只是 fB = function () print(b) end 的糖。当您这样做时,很明显b 正在fA 中使用,并且您正在分配给全局变量fB。因此,您在 Lua 5.2 中获得了 fA 的 3 个上值。 (print 的使用也意味着 fA 使用全局变量。)如果您使用 local function fB ... 并删除 print,您将看到 fA 在 5.1 和 5.2 中使用 2 个上值。
【讨论】:
它的实现定义;可能是一两个。或三个(环境的一个升值)。你不知道,你应该永远不必关心。
【讨论】: