国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 開發 > 綜合 > 正文

Lua中的全局變量、非全局變量總結

2024-07-21 23:04:12
字體:
來源:轉載
供稿:網友

前言

Lua將其所有的全局變量保存在一個常規的table中,這個table稱為“環境”。這種組織結構的優點在于,其一,不需要再為全局變量創造一種新的數據結構,因此簡化了Lua的內部實現;另一個優點是,可以像其他table一樣操作這個table。為了便于實施這種操作,Lua將環境table自身保存在一個全局變量_G中。例如,我們可以使用以下代碼打印當前環境中所有全局變量的名稱。

復制代碼 代碼如下:

for n in pairs(_G) do print(n) end

在你的電腦上運行一下以上代碼,看看結果。

 

全局變量聲明

在Lua中,全局變量不需要聲明就可以直接使用,但是這樣違反了編程的大忌,隨便使用全局變量,將導致程序的性能,當出現bug時,也很難去發現,同時也污染了程序中的命名??紤]到全局變量也是存放在一個table中,我們則可以通過元表來改變其它代碼訪問全局變量時的行為,看到了么?又是元表。代碼如下:

復制代碼 代碼如下:

setmetatable(_G, {
     __newindex = function (_, k)
          error("Attempt to write to undeclared variable " .. k)
     end,
     __index = function (_, k)
          error("Attempt to read undeclared variable " .. k)
     end
})
 
print(a) -- 這里a就是一個全局變量

而有的時候,我們的確需要定義一個全局變量,那怎么辦?還記得我在《Lua中的元表與元方法》這篇文章中寫的嗎?使用rawset就可以完成,它是不同過元表的,直接設置table的值;同時,為了測試一個變量是否存在,就不能簡單的將它與nil比較。因為如果它為nil,訪問就會拋出一個錯誤,同樣,我們可以使用rawget來繞過元方法。

 

非全局的變量

由于“環境”這個概念是全局的,任何對他的修改都會影響程序的所有部分。例如:若安裝一個元表用于控制全局變量的訪問,那么整個程序都必須遵循這個規范。但使用某個庫時,沒有先聲明就使用了全局變量,那么這個程序就無法運行了。

可以通過函數setfenv來改變一個函數的環境。該函數的參數是一個函數和一個新的環境table。第一個參數除了可以指定為函數本身,還可以指定為一個數字,以表示當前函數調用棧中的層數。數字1表示當前函數,數字2表示調用當前函數的函數,以此類推。首先來一小段代碼:

 

復制代碼 代碼如下:

a = 1 -- 這里創建了一個全局變量
 
-- 將當前環境變量改為一個新的空table
setfenv(1, {})
print(a)

運行代碼會彈出這樣的錯誤:attempt to call global ‘print' (a nil value)

 

print是存放在_G中的,由于我們將當前的環境變量重置為了一個空的table,導致找不到print了,所以就出現了錯誤。為了防止這樣的錯誤的放生,在我們改變當前的環境變量之前,我們需要保存當前的環境變量。看下面的代碼:

復制代碼 代碼如下:

a = 1 -- 這里創建了一個全局變量
 
-- 將當前環境變量改為一個新的空table
setfenv(1, {g = _G})
g.print(a)          -- 輸出nil
g.print(g.a)     -- 輸出1

這個時候訪問g就會得到原來的環境,這個環境中包含了字段print。我們可以使用名字_G來代替g,如下述代碼:
復制代碼 代碼如下:

a = 1 -- 這里創建了一個全局變量
 
-- 將當前環境變量改為一個新的空table
setfenv(1, {_G = _G})
_G.print(a)          -- 輸出nil
_G.print(_G.a)     -- 輸出1

不要忘了我們之前總結的__index元方法,我們可以設置新的環境變量的__index為_G,這樣,當在新的環境中找不到對應的變量時,就會去_G中找,這樣,就相當于新的環境變量繼承了全局的環境變量_G,看以下代碼:

 

 

復制代碼 代碼如下:

a = 1 -- 這里創建了一個全局變量
 
local newEnv = {}
setmetatable(newEnv, {__index = _G})
 
-- 將當前環境變量改為一個新的空table
setfenv(1, newEnv)
print(a)

在Lua中,函數會繼承創建其的環境,所以一個程序塊若改變了它自己的環境,那么后續由它創建的函數都將共享這個新環境。這項機制對于創建名稱空間是很有用的。之后的總結中還會繼續講解的。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
樱花草在线观看www| 国产三线在线| 伊人免费视频| 在线一区二区三区精品| 中文字幕av高清在线观看| 国产黄a三级三级三级av在线看| 国产视频福利| aaa大片在线观看| 牛牛热在线视频| 日本黄在线观看| 成人超碰在线| 国产福利免费观看| 欧美艹逼视频| 五月婷婷视频在线观看| 99re在线视频| 国产视频中文字幕| 老司机精品视频一区二区| 国产黄色网页| 中文字幕在线第一页| 欧美日韩视频精品二区| 国产视频1区| 麻豆国产在线播放| 精品999视频| 最近高清中文在线字幕在线观看| 97国产在线| 丁香在线视频| 俺来俺也去www色在线观看| 尤物网在线观看| 久久精品蜜桃| 亚洲成人电视网| 国产成人亚洲综合小说区| 国产在线激情视频| 亚洲第一成人在线视频| 国产高清视频免费最新在线| 狠狠操视频网| 美女av在线播放| 夜夜操com| 一区二区三区四区在线免费视频| 最近中文字幕mv免费高清视频8 | 久久精品最新免费国产成人| 国产黄网站在线观看| 豆国产97在线|亚洲| 亚洲精品一线| 青青草在线视频免费观看| 亚洲电影视频在线| av文字幕在线观看| av日韩国产| 夜夜操com| www操操操| 欧美精品一区二区三区免费| 热99re久久精品精品免费| 波多野结衣久久高清免费| 任你操在线观看| 青青草免费在线观看| 久久国产精品黑丝| 最新中文字幕av专区| 国产高清在线观看| 99reav| 激情亚洲综合网| 日本中文字幕在线观看| 国产视频97| 亚洲精品天堂在线| 九九热免费在线视频| 国产污视频在线| 在线国产中文字幕| 丁香综合在线| 在线国产三级| 国产天堂在线播放视频| 国产中文在线| 91亚洲精选| 九九色在线观看| 91青青在线视频| 国产在线观看a视频| 精品国产白色丝袜高跟鞋| 蜜桃视频中文字幕| 国产jizz| 国产一级性片| а√天堂8资源在线官网| 国产小视频免费在线观看| 亚洲精品少妇久久久久久| 国产精品天堂| 久热av在线| 性网站在线看| 国产福利在线| 国产免费视频在线| 免费影视观看网站入口| 国产成人亚洲欧美电影| 国产野外战在线播放| 激情综合丁香| 免费特级黄毛片| 日本在线天堂| 四虎成人欧美精品在永久在线 | 国产精品一区二区三区四区色| 精品一区二区三区免费站| 最新中文字幕在线| 开心婷婷激情| 欧美精品se| 在线免费观看你懂的| 777电影在线观看| 国产极品美女到高潮| 国产三级在线| 国产成人天天5g影院| 国产精品四虎| 91在线高清| 精品国产福利一区二区在线 | 国产字幕在线看| 免费黄色网页在线观看| 青青草在线播放| 青青艹在线视频| 天海翼中文字幕| 欧美精品小视频| 丁香综合五月| 国产区av在线| 在线观看国产视频| 人成在线免费视频| 天天操人人爽| 中文av资源在线| www在线视频观看| 国产精品一区牛牛影视| 国产网站免费观看| 怡红院av在线| 狠狠色综合久久婷婷| 国产精品你懂的在线观看| 精品176二区| 男女羞羞视频在线观看| 国产一级免费看| 在线黄色国产电影| 成人免费一区二区三区牛牛 | 在线中文视频| 啪啪免费视频一区| 国产视频青青| 欧美色第一页| 2019天天操夜夜操| 国产尤物一区二区三区| 在线观看的av网站| 天天操夜夜操天天射| 国产黄色在线播放| 久久一本精品| 香蕉视频网站在线播放| 国产欧美黑人| 国产精品自拍在线观看| 四虎中文字幕| 精品亚洲综合| 国产一区精品| 免费的黄网站在线观看| 在线观看的av| 97视频在线观看网站| 中文字幕在线免费视频| www在线观看播放免费视频日本| 国产精品jvid在线观看| 国产免费福利| www.蜜桃av| av在线第一页| 香蕉视频网站在线观看| 2020亚洲男人天堂| 国产丝袜在线观看视频| 成人av小说网| 国产精品外围在线观看| 国产资源在线看| 丁香综合五月| 国产伦精品一区二区三区高清版禁 | 91超碰在线免费| 欧美日韩亚洲国内综合网| 在线观看国产福利视频| 999精品网| 精品国产丝袜高跟鞋| 精品国产免费第一区二区| 99reav在线| 麻豆av在线| 午夜视频99| 国产高清av| av在线网页| 九九热在线视频观看| 国产精品自拍在线观看| 中文字幕在线免费观看| 国产三级做爰在线观看| 国产视频中文字幕| 在线天堂中文| 欧洲有码在线视频| 国产中文字幕在线| 国产青青草在线| 亚洲成人在线播放| 国产在线视频网站| 国产精品久久久久一区二区国产| 国产成人亚洲综合小说区| 亚洲欧美国产另类首页| 日韩av成人| 欧美性猛交xxxx免费看蜜桃 | 国产偷窥老熟盗摄视频| 国产网友自拍视频导航网站在线观看| 国产国产国产国产国产国产| 在线一区观看| **三级三级97片毛片| 在线观看wwww| 国产精品一区在线看| 永久免费网站在线| 最新中文字幕在线| 欧美日韩在线视频免费观看| 国产福利免费在线观看| 国产中文在线观看|