a=1 -- 全局變量中a=1
local env={a=10,print=_G.print} -- 新環境中a=10,并且確保能訪問到全局的print函數
function f1()
local _ENV=env
print("in f1:a=",a)
a=a*10 -- 修改的是新環境中的a值
end
f1()
print("globally:a=",a)
print("env.a=",env.a)
local modname = 模塊名
local M = {} -- M即為存放模塊所有函數及常數的table
_G[modname] = M
package.loaded[modname] = M
setmetatable(M,{__index=_G}) -- package.seeall可以使全局環境_G對當前環境可見
local _ENV = M -- 設置當前的運行環境為 M,這樣后續所有代碼都不需要限定模塊名了,所定義的所有函數自動變成M的成員
函數定義以及常量定義>
Account = {balance = 0}
function Account.withdraw(v)
Account.balance = Account.balance - v
end
lua 支持閉包,這個特性可以用來模擬對象的私有成員變量
function new_account(b)
local balance = b
return {withdraw = function (v) balance = balance -v end,
get_balance = function () return balance end
}
end
a1 = new_account(1000)
a1.withdraw(10)
print(a1.get_balance())