33. Lua 非全局環境

-- 改變當前的環境 方法一
--[[ 
a = 1  -- 創建一個全局變量
setfenv( 1, { g = _G }) -- 使用 setfenv 改變當前的環境
g.print( a )
g.print( g.a )
--]]

-- 改變當前的環境 方法二
--[[
a = 1
local newgt = {}  -- 創建新環境
setmetatable( newgt , { __index = _G } )
setfenv( 1 , newgt )  -- 設置它
print(a)
a = 10
print(a)
print(_G.a)
_G.a = 20
print(_G.a)
--]]

function factory()
    return function()
        return a -- "全局的" a
    end
end

a = 3
f1 = factory()
f2 = factory()
print(f1())
print(f2())

setfenv( f1 , { a = 10 })

print(f1())
print(f2())

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容