一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Lua - Lua中編譯執行代碼相關的函數詳解

Lua中編譯執行代碼相關的函數詳解

2020-04-21 11:08hebedich Lua

這篇文章主要介紹了Lua中編譯執行代碼相關的函數詳解的相關資料,需要的朋友可以參考下

可以說Lua之所以稱為是一種解釋型的語言,正是因為有諸如load這樣的函數,因為這樣的函數使得Lua可以執行動態生成的代碼。下面具體來分析這些函數。

load函數

   load函數原型如下:

 

復制代碼 代碼如下:

load (chunk [, chunkname [, mode [, env]]]) 

 

 該函數加載一個chunk,如果沒有錯誤,則返回一個函數。如果傳入chunk的值是一個字符串,則就加載這個字符串;如果傳入chunk的值是一個函數,則這個函數必須返回一個字符串,并且load會一直調用這個函數,直到這個函數返回空字符串或nil,load會把每次函數的返回結果連接起來作為chunk去加載。

如果沒有語法錯誤,則load返回chunk對于的函數,否則返回nil和對應的錯誤信息。如果返回的函數有upvalue,則第一個upvalue的值被設置成傳入的參數env,若沒有傳入這個參數的值,則第一個upvalue的值為全局環境。返回的函數upvalue不會任何其他函數共享。

    參數chunkname作為錯誤信息的chunk的名字,用于調試。若chunk是字符串,則chunkname默認值是變量chunk的值,否則是=(load)。參數mode決定了傳入給chunk的值是文本或二進制數據。如果是”b”,則傳給chunk的值必須是二進制數據(比如可以使用string.dump(foo)得到相應函數的二進制數據,然后傳遞給load),如果是”t”,而必須是文本數據,如果是”bt”,則文件或二進制數據都可以。默認值是”bt”。

    Lua不會檢測二進制數據的穩定性,因此惡意的二進制數據可能導致Lua解釋器Crash。

loadfile函數

    函數原型如下:

 

復制代碼 代碼如下:

loadfile ([filename [, mode [, env]]]) 

 

 該函數類似于load,但是從文件filename或標準輸入(若filename為空)中活動chunk加載。
dofile函數
    函數原型如下:

 

復制代碼 代碼如下:

dofile ([filename]) 

 

 讀取文件filename的內容,并把它作為lua的chunk執行。如果沒傳入參數,則從標準輸入中讀取執行內容。返回值跟chunk執行后返回的值相同。如果出現錯誤,dofile會把錯誤信息傳遞給它的調用者。也就是說,dofile在無保護模式下執行。注意該函數不同于loadfile,loadfile只是返回一個函數,并不會執行,并且出現錯誤時,loadfile會返回一個錯誤信息,而不會傳遞給它的調用者。總之、loadfile會從一個文件中加載Lua代碼塊,但不會運行代碼,只是編譯代碼,然后將編譯結果從一個函數返回。而dofile除了編譯代碼外,還會運行返回的結果。
    上面討論的Lua層面的編譯執行相關的函數,對應的C API相關函數有:lua_load、luaL_loadfilex、luaL_loadfile和luaL_dofile,這些函數非常類似對應的Lua層函數。

loadstring函數

    函數原型如下:

 

復制代碼 代碼如下:

loadstring (string [, chunkname]) 

 

  該函數通用類似于load,它等價于給load函數傳遞字符串做作為參數。為了加載和運行一個字符串,可以這些寫:

 

復制代碼 代碼如下:

assert(loadstring(s))() 

 

注意該函數在Lua5.2被刪除了,因為它完全可被load替代。

以上所述就是本文的全部內容了,希望對大家熟練掌握lua能夠有所幫助。

延伸 · 閱讀

精彩推薦
  • LuaLua和C語言的交互詳解

    Lua和C語言的交互詳解

    這篇文章主要介紹了Lua和C語言的交互詳解,Lua和C語言通過棧完成交互,本文結合代碼實例詳細講解了交互的方法,需要的朋友可以參考下 ...

    果凍想3702020-04-14
  • LuaLua實現__add方法重載示例

    Lua實現__add方法重載示例

    這篇文章主要介紹了Lua實現__add方法重載示例,本文直接給出實現代碼,需要的朋友可以參考下 ...

    腳本之家7452020-04-24
  • Lua深入探究Lua中的解析表達式

    深入探究Lua中的解析表達式

    這篇文章主要介紹了深入探究Lua中的解析表達式,對于其語法部分的說明和示例都超詳細,極力推薦此文!需要的朋友可以參考下 ...

    腳本之家3542020-05-05
  • LuaLua簡介、編譯安裝教程及變量等語法介紹

    Lua簡介、編譯安裝教程及變量等語法介紹

    這篇文章主要介紹了Lua簡介、編譯安裝教程及變量等語法介紹,本文同時講解了lua注釋語法、Lua命令行方式等內容,需要的朋友可以參考下 ...

    junjie3632020-04-14
  • LuaLua中的元方法__newindex詳解

    Lua中的元方法__newindex詳解

    這篇文章主要介紹了Lua中的元方法__newindex詳解,本文講解了查詢與更新、監控賦值、通過table給另一個table賦值等內容,需要的朋友可以參考下 ...

    笨木頭8872020-04-09
  • LuaLua教程(二):基礎知識、類型與值介紹

    Lua教程(二):基礎知識、類型與值介紹

    這篇文章主要介紹了Lua教程(二):基礎知識、類型與值介紹,本文講解了Hello World程序、代碼規范、全局變量、類型與值等內容,需要的朋友可以參考下 ...

    腳本之家5922020-04-28
  • LuaLua中table庫函數方法介紹

    Lua中table庫函數方法介紹

    這篇文章主要介紹了Lua中table庫函數方法介紹,本文講解了concat、insert、maxn、remove、sort、foreachi等方法,需要的朋友可以參考下 ...

    腳本之家2502020-04-17
  • LuaLua中計算、執行字符串中Lua代碼的方法

    Lua中計算、執行字符串中Lua代碼的方法

    這篇文章主要介紹了Lua中計算、執行字符串中Lua代碼的方法,類似JavaScript中eval函數的功能,在Lua中也可以實現,需要的朋友可以參考下 ...

    腳本之家6322020-04-30
主站蜘蛛池模板: 私人家庭影院5577 | 午夜精品久久久久久中宇 | 亚洲第一综合网站 | 亚洲精品国偷拍自产在线观看蜜臀 | 冰山美人调教耻辱h | 亚洲高清无在码在线电影 | 国产成人a v在线影院 | 日韩欧美中文字幕出 | 国产成人免费片在线视频观看 | xxxx俄罗斯大白屁股 | 亚洲天堂免费看 | 色呦呦网 | 王淑兰与铁柱全文免费阅读 | 草莓视频旧版 | 午夜国产精品视频 | 99久久免费国内精品 | 8天堂资源在线官网 | 公翁的舌尖研磨她的花蒂小说 | 亚洲福利天堂网福利在线观看 | 色戒完整版 | 女娃开嫩苞经历小说 | 无套日出白浆在线播放 | 男人j桶进女人p桶爽 | 亚久久伊人精品青青草原2020 | 日韩一级欧美一级一级国产 | 牛牛色婷婷在线视频播放 | 四虎永久免费地址 | 四虎网址大全 | 毛片在线免费观看网站 | 国产黄频在线观看高清免费 | 日本xxxx在线视频免费 | 久久久GOGO无码啪啪艺术 | 福利视频一区二区三区 | 免费一级国产生活片 | 俄罗斯15一16处交 | 欧美一级在线视频 | 午夜影院免费观看视频 | 金牛网155755水心论坛黄大父母 | 欧美高清日韩 | 调教处男 | 久久99精品涩AV毛片观看 |