欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

盡管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:

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)用其讀取代碼;

相關(guān)文章

  • Lua中的函數(shù)代碼實(shí)例

    Lua中的函數(shù)代碼實(shí)例

    這篇文章主要介紹了Lua中的函數(shù)代碼實(shí)例,本文著重講解函數(shù)的寫(xiě)法以及一些小知識(shí),需要的朋友可以參考下
    2015-04-04
  • Lua中調(diào)用C++函數(shù)示例

    Lua中調(diào)用C++函數(shù)示例

    這篇文章主要介紹了Lua中調(diào)用C++函數(shù)示例,本文給出的C++函數(shù)average()演示了如何接受多個(gè)參數(shù)且返回超過(guò)一個(gè)值,需要的朋友可以參考下
    2015-07-07
  • Lua中的遞歸函數(shù)寫(xiě)法實(shí)例

    Lua中的遞歸函數(shù)寫(xiě)法實(shí)例

    這篇文章主要介紹了Lua中的遞歸函數(shù)寫(xiě)法實(shí)例,本文直接給出代碼實(shí)例,并作了簡(jiǎn)潔注釋,需要的朋友可以參考下
    2015-04-04
  • Lua中的變量和流控制入門(mén)學(xué)習(xí)

    Lua中的變量和流控制入門(mén)學(xué)習(xí)

    這篇文章主要介紹了Lua中的變量和流控制入門(mén)學(xué)習(xí),其中--兩個(gè)橫線開(kāi)始單行的注釋,--[[加上兩個(gè)[和]表示多行的注釋--]],需要的朋友可以參考下
    2015-07-07
  • Lua一維數(shù)組與多維數(shù)組的使用示例

    Lua一維數(shù)組與多維數(shù)組的使用示例

    今天小編就為大家分享一篇關(guān)于Lua一維數(shù)組與多維數(shù)組的使用示例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • Lua中的__index方法詳解

    Lua中的__index方法詳解

    這篇文章主要介紹了Lua中的__index方法詳解,本文詳細(xì)講解了__index方法的相關(guān)知識(shí),以及代碼示例,需要的朋友可以參考下
    2015-04-04
  • Lua中操作字符串的基本方法整理

    Lua中操作字符串的基本方法整理

    這篇文章主要介紹了Lua中操作字符串的基本方法整理,是Lua入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • 詳解Lua中的while循環(huán)語(yǔ)句的使用

    詳解Lua中的while循環(huán)語(yǔ)句的使用

    這篇文章主要介紹了詳解Lua中的while循環(huán)語(yǔ)句的使用,是Lua入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Lua中的metatable介紹

    Lua中的metatable介紹

    這篇文章主要介紹了Lua中的metatable介紹,Lua 中的每個(gè)值都可以用一個(gè) metatable,個(gè) metatable 就是一個(gè)原始的 Lua table,它用來(lái)定義原始值在特定操作下的行為,要的朋友可以參考下
    2015-04-04
  • Lua中rawset和rawget的作用淺析

    Lua中rawset和rawget的作用淺析

    這篇文章主要介紹了Lua中rawset和rawget的作用淺析,本文分別用兩段代碼演示了rawset和rawget的作用,需要的朋友可以參考下
    2015-04-04

最新評(píng)論