亚洲欧美日韩熟女|做爱高潮视频网址|国产一区二区三级片|国产Av中文字幕www.性色av|亚洲婷婷永久免费|国产高清中文字幕|欧美变态网站久re视频精品|人妻AV鲁丝第一页|天堂AV一区二区在线观看|综合 91在线精品

lua作用域本質(zhì)

2023-04-12


lua沒有全局變量,為什么這樣設(shè)計呢?


以這個文件為例說明 test.lua


-------------------------------------


a = 100;


local m = 4;


function foo()


local i = 5;


print(a, m, i);


function bar()


print(a, m, i);


end


end


首先整個文件是個函數(shù),它本身有個默認的變量G(upval類型)。任何函數(shù)里面都可以再定義函數(shù),變量會往最外層找它的出處,如果沒有,則變成G['varname']。


所以以上的變量會是這樣的:


對文件這個函數(shù),有3個變量a, m, foo,函數(shù)名本身也是。


a => G['a'];


m => local;


foo => G['foo'];


對foo這個函數(shù),有4個變量i, print, a, m, bar。


i => local


print => G['print'];


m => upval


bar => G['bar']


對bar這個函數(shù),有4個變量print, a, m, i。


print => G['print'];


a => G['a'];


m => upval;


i => upval;


我們解釋下什么是local和upval。


local是已經(jīng)聲明為local的局部變量,lua變量跟js有點類似,除非顯示聲明為局部變量,否則是其它類型。local這樣很好理解。


upval是在本函數(shù)里沒有聲明,但是在外層有聲明的變量。簡單講就是在外層是local,或已經(jīng)是upval的,屬于本層函數(shù)的變量,如foo里的m,bar里的i。


G本身已經(jīng)是個upval,它的值是一個lua里面的hash table。


因此lua總共就4種類型 local, upval, table, tabup。因此任何看似全局變量的,其實是tabup,也就是G['var']。lua就是這樣通過抽象把全局變量給抹掉了。


本文僅代表作者觀點,版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請在文中注明來源及作者名字。

免責聲明:本文系轉(zhuǎn)載編輯文章,僅作分享之用。如分享內(nèi)容、圖片侵犯到您的版權(quán)或非授權(quán)發(fā)布,請及時與我們聯(lián)系進行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com