麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

Lua中的源代碼預(yù)編譯淺析

2024-07-21 23:04:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

盡管Lua被稱(chēng)為是一種解釋型的語(yǔ)言,但Lua確實(shí)允許在運(yùn)行源代碼之前,將源代碼預(yù)編譯成一種中間形式(類(lèi)比Python的.pyc)。區(qū)別解釋型語(yǔ)言的主要特征在于編譯器是否是語(yǔ)言運(yùn)行時(shí)庫(kù)的一部分,即是否有能力執(zhí)行動(dòng)態(tài)生成的代碼(Lua可以通過(guò)dofile執(zhí)行Lua代碼)。

 其實(shí),dofile的核心功能是由loadfile完成的,可以這樣來(lái)定義dofile:

Lua,源代碼,預(yù)編譯

loadfile并不是執(zhí)行代碼,而只是編譯,返回一個(gè)函數(shù),由dofile執(zhí)行。
如果多次運(yùn)行一個(gè)文件,可以只調(diào)用一次loadfile,重復(fù)調(diào)用其返回的函數(shù)即可。
  
另外一個(gè)函數(shù),loadstring從字符串加載代碼:

復(fù)制代碼 代碼如下:

> f = loadstring('print "hello"')
> f()
hello

考察一下loadstring代碼的執(zhí)行域
復(fù)制代碼 代碼如下:

> i = 1
> f = loadstring('i = i + 1')
> =i
1
  
--不要完了交互式命令行中,一行代碼默認(rèn)一個(gè)block
  
> f = loadstring('i=i+1')
> do
>> local i =1
>> f()
>> print(i)
>> end
1
  
> do
>> local i = 1
>> local f = loadstring('i=i+1')
>> f()
>> print(i)
>> end
1

兩次運(yùn)行,都是將global中的i加1.
可以這樣理解f:
復(fù)制代碼 代碼如下:

function f()
i = i+1
end

但如果直接替換,其結(jié)果并不一致。
復(fù)制代碼 代碼如下:

> do
>> local i =1
>> function f()
>> i = i + 1
>> end
>> f()
>> print(i)
>> end
2

可以認(rèn)為,loadstring編譯出的函數(shù),會(huì)關(guān)聯(lián)global scope,因而不會(huì)表現(xiàn)出閉包的特性,故而,應(yīng)該盡量不使用這種方式!
  
另外,如果語(yǔ)法有誤,那么loadstring返回nil。
可以使用assert(loadstring(s))()的方式。
如果參數(shù)不是nil/false,返回參數(shù),否則assert error;
  
深究一下loadfile和loadstring就會(huì)知道,Lua中其實(shí)有一個(gè)load函數(shù),后者接收一個(gè)reader function,調(diào)用其讀取代碼;
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 性猛交ⅹxxx乱巴西 欧美日韩1区2区3区 | 国产精品久久久久久久久久东京 | 蜜桃精品视频在线观看 | 毛片一区二区三区四区 | 99ri在线 | 亚洲小视频在线观看,com | 久久亚洲网 | 在线播放黄色片 | 免费看欧美一级特黄a毛片 九色com | 日韩美香港a一级毛片免费 日韩激情 | 色人阁在线视频 | 久久3| a网站在线 | 国产成人精品午夜视频' | 综合精品久久 | 久久精品79国产精品 | 蜜桃精品视频在线观看 | 羞羞网站| 国产999精品久久久久 | 成人午夜视频免费在线观看 | 欧美一区二区黄 | 欧美wwwsss9999| 欧美成人精品一区二区 | 黄色片免费在线播放 | 国产无遮挡一区二区三区毛片日本 | 麻豆视频国产在线观看 | 一边吃奶一边摸下娇喘 | 国产老师做www爽爽爽视频 | 一级@片 | 欧美日韩在线播放一区 | 九九热视频在线免费观看 | 久久久久久久久久91 | 久久人人爽人人爽人人片av免费 | 成人毛片av在线 | 日本视频免费看 | 成人免费一区 | 精品亚洲福利一区二区 | av在线更新| 日韩毛片毛片久久精品 | 日韩电影一区二区 | 一级空姐毛片 |