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

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

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

服務器之家 - 腳本之家 - Lua - Lua中的源代碼預編譯淺析

Lua中的源代碼預編譯淺析

2020-04-11 11:21iCode0410 Lua

這篇文章主要介紹了Lua中的源代碼預編譯淺析,Lua確實允許在運行源代碼之前,將源代碼預編譯成一種中間形式(類比Python的.pyc),需要的朋友可以參考下

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

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

Lua中的源代碼預編譯淺析

loadfile并不是執行代碼,而只是編譯,返回一個函數,由dofile執行。
如果多次運行一個文件,可以只調用一次loadfile,重復調用其返回的函數即可。
  
另外一個函數,loadstring從字符串加載代碼:

復制代碼 代碼如下:

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


考察一下loadstring代碼的執行域

復制代碼 代碼如下:

> i = 1
> f = loadstring('i = i + 1')
> =i
1
  
--不要完了交互式命令行中,一行代碼默認一個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


兩次運行,都是將global中的i加1.
可以這樣理解f:

復制代碼 代碼如下:

function f()
i = i+1
end


但如果直接替換,其結果并不一致。

復制代碼 代碼如下:

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


可以認為,loadstring編譯出的函數,會關聯global scope,因而不會表現出閉包的特性,故而,應該盡量不使用這種方式!
  
另外,如果語法有誤,那么loadstring返回nil。
可以使用assert(loadstring(s))()的方式。
如果參數不是nil/false,返回參數,否則assert error;
  
深究一下loadfile和loadstring就會知道,Lua中其實有一個load函數,后者接收一個reader function,調用其讀取代碼;

 

延伸 · 閱讀

精彩推薦
  • LuaLua實現__add方法重載示例

    Lua實現__add方法重載示例

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

    腳本之家7452020-04-24
  • LuaLua中的元方法__newindex詳解

    Lua中的元方法__newindex詳解

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

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

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

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

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

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

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

    腳本之家3542020-05-05
  • LuaLua和C語言的交互詳解

    Lua和C語言的交互詳解

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

    果凍想3702020-04-14
  • LuaLua中table庫函數方法介紹

    Lua中table庫函數方法介紹

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

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

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

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

    junjie3632020-04-14
  • LuaLua中計算、執行字符串中Lua代碼的方法

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

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

    腳本之家6322020-04-30
主站蜘蛛池模板: 白丝超短裙被输出娇喘不停小说 | 国产成人精品免费午夜 | 亚洲29p | 国产一区在线看 | 九九99九九精彩网站 | 成年男女免费视频 | bestialitysex杂交 bedfriend泰剧全集免费观看 | 99久久99久久久精品齐齐鬼色 | 日韩在线成人 | 日韩亚洲一区中文字幕在线 | 国产123区 | 亚洲成av人在线视 | 国产午夜精品福利 | 欧美在线观看网址 | 91久久青青青国产免费 | 久久婷婷丁香五月色综合啪免费 | 无套日出白浆在线播放 | 1024毛片| 国产精品日韩欧美在线 | 免费看美女被靠到爽 | 四虎影视国产精品婷婷 | 精品久久久久久久国产潘金莲 | 网友自拍咪咪爱 | 久草青青在线 | 不良研究所地址一 | 国产好痛疼轻点好爽的视频 | 久久精品热在线观看85 | 精灵之森高清在线 | 欧美日韩高清完整版在线观看免费 | 欧美聚众性派对hdsex | 小便japanesewctv | 暖暖的免费观看高清视频韩国 | 欧美一区二区三区免费高 | 大胸纲手被羞羞漫画网站 | blacked黑人| 日韩精品成人a在线观看 | 草莓视频深夜释放 | 成年女人毛片免费观看中文w | 国产精品在线 | 999久久久| 精品国语国产在线对白 |