佳木斯湛栽影视文化发展公司

主頁 > 知識(shí)庫 > Lua中的源代碼預(yù)編譯淺析

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

熱門標(biāo)簽:Linux服務(wù)器 服務(wù)外包 地方門戶網(wǎng)站 網(wǎng)站排名優(yōu)化 呼叫中心市場需求 百度競價(jià)排名 AI電銷 鐵路電話系統(tǒng)

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

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

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)該盡量不使用這種方式!
  
另外,如果語法有誤,那么loadstring返回nil。
可以使用assert(loadstring(s))()的方式。
如果參數(shù)不是nil/false,返回參數(shù),否則assert error;
  
深究一下loadfile和loadstring就會(huì)知道,Lua中其實(shí)有一個(gè)load函數(shù),后者接收一個(gè)reader function,調(diào)用其讀取代碼;

您可能感興趣的文章:
  • Lua中使用元表(metatable)執(zhí)行算術(shù)類元方法實(shí)例
  • Lua簡介、編譯安裝教程及變量等語法介紹
  • Mac平臺(tái)中編譯安裝Lua運(yùn)行環(huán)境及Hello Lua實(shí)例
  • Lua中編譯執(zhí)行代碼相關(guān)的函數(shù)詳解

標(biāo)簽:銅川 蘭州 仙桃 湘潭 黃山 衡水 崇左 湖南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua中的源代碼預(yù)編譯淺析》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    盐池县| 黎城县| 常宁市| 湘潭县| 瑞安市| 武宣县| 镇远县| 阜新| 崇文区| 开平市| 潮州市| 江安县| 上思县| 辽中县| 扶沟县| 江陵县| 兴业县| 东兰县| 高唐县| 永德县| 郎溪县| 通道| 登封市| 江津市| 苏尼特右旗| 萨嘎县| 武定县| 渝北区| 许昌县| 自治县| 横山县| 项城市| 永靖县| 麦盖提县| 龙海市| 南平市| 秭归县| 淮滨县| 呼图壁县| 青州市| 内丘县|