隨着Lua代碼塊這樣的:如何計算嵌套Lua函數中的upvalues值?
local a, b
function fA()
print(a)
function fB()
print(b)
end
end
多少upvalues爲fA究竟有1或2?
隨着Lua代碼塊這樣的:如何計算嵌套Lua函數中的upvalues值?
local a, b
function fA()
print(a)
function fB()
print(b)
end
end
多少upvalues爲fA究竟有1或2?
根據定義,函數中使用的所有外部局部變量均計爲upvalues。 如前所述,在Lua 5.2中,如果函數使用全局變量,那麼對於環境也有一個隱藏價值。
您可能需要閱讀luac -l -l
爲您的代碼生成的字節碼。
您可能會困惑的是正文fB
的定義。回想一下, function fB() print(b) end
只是糖fB = function() print(b) end
。當你這樣做時,很顯然b
正在fA
中使用,並且您正在分配給全局變量fB
。因此你可以在Lua 5.2中得到fA
的3個upvalues。 (使用print
也意味着fA
使用全局變量。)如果您使用local function fB ...
並刪除print
,則會看到fA
在5.1和5.2中使用了2個upvalues。
它的實現已定義;它可能是一兩個。或三個(環境價值最高的一個)。你不知道,你應該從來沒有必須在意。