最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Lua中的源代碼預編譯淺析

 更新時間:2014年09月23日 09:54:54   作者:iCode0410  
這篇文章主要介紹了Lua中的源代碼預編譯淺析,Lua確實允許在運行源代碼之前,將源代碼預編譯成一種中間形式(類比Python的.pyc),需要的朋友可以參考下

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

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

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

復制代碼 代碼如下:

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

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

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

相關文章

  • Lua select函數(shù)用法實例

    Lua select函數(shù)用法實例

    這篇文章主要介紹了Lua select函數(shù)用法實例,本文直接給出代碼實例,并講解了select函數(shù)的使用技巧,需要的朋友可以參考下
    2015-04-04
  • Lua和C語言的交互詳解

    Lua和C語言的交互詳解

    這篇文章主要介紹了Lua和C語言的交互詳解,Lua和C語言通過棧完成交互,本文結合代碼實例詳細講解了交互的方法,需要的朋友可以參考下
    2014-09-09
  • Lua編程中使用嵌套循環(huán)的使用教程

    Lua編程中使用嵌套循環(huán)的使用教程

    這篇文章主要介紹了Lua編程中使用嵌套循環(huán)的使用教程,是Lua入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • Lua獲取utf8字符串長度和字符串截取并用...代替

    Lua獲取utf8字符串長度和字符串截取并用...代替

    這篇文章主要介紹了Lua獲取utf8字符串長度和字符串截取并用...代替,本文直接給出兩個函數(shù)的實現(xiàn)代碼,需要的朋友可以參考下
    2015-04-04
  • Lua入門學習筆記

    Lua入門學習筆記

    這篇文章主要介紹了Lua入門學習筆記,本文適合有一定編程基礎的同學,可以依據(jù)本文快速入門Lua腳本語言,需要的朋友可以參考下
    2014-10-10
  • Lua學習筆記之類型與值

    Lua學習筆記之類型與值

    本文詳細的總結了Lua中的類型與值,對于實際編程中容易出錯的地方也進行了詳細的總結,十分的全面實用。有需要的小伙伴可以參考下。
    2015-04-04
  • Lua元表與元方法實例講解

    Lua元表與元方法實例講解

    這篇文章主要介紹了Lua元表與元方法實例講解,本文講解了算術類、關系類元方法、table訪問的元方法等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Lua 操作 MongoDB 數(shù)據(jù)庫實例

    Lua 操作 MongoDB 數(shù)據(jù)庫實例

    這篇文章主要介紹了Lua 操作 MongoDB 數(shù)據(jù)庫實例,本文給出了修改后的lua-mongo API和具體的操作MongoDB 數(shù)據(jù)庫代碼,需要的朋友可以參考下
    2015-03-03
  • Golang使用ChatGPT生成單元測試實踐

    Golang使用ChatGPT生成單元測試實踐

    這篇文章主要為大家介紹了Golang使用ChatGPT生成單元測試實踐詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Lua中table庫函數(shù)方法介紹

    Lua中table庫函數(shù)方法介紹

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

最新評論

邵东县| 汶川县| 湖州市| 阿城市| 葫芦岛市| 双城市| 江城| 苗栗市| 永昌县| 临洮县| 鄢陵县| 东乡族自治县| 台南县| 新化县| 永泰县| 曲沃县| 平山县| 醴陵市| 泾源县| 河东区| 巴中市| 东丽区| 章丘市| 施秉县| 同心县| 革吉县| 沁源县| 万年县| 武陟县| 高青县| 文成县| 龙山县| 虞城县| 吕梁市| 连南| 乌鲁木齐市| 师宗县| 沙湾县| 通化市| 巴马| 临朐县|