自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關(guān)于Lua Module機(jī)制分析

移動開發(fā) iOS
關(guān)于Lua Module機(jī)制分析是本文要介紹的內(nèi)容,主要是來了解并學(xué)習(xí)Lua Module機(jī)制,具體內(nèi)容來看本文詳解。

關(guān)于Lua Module機(jī)制分析是本文要介紹的內(nèi)容,主要是來了解并學(xué)習(xí)Lua Module機(jī)制,具體內(nèi)容來看本文詳解。Lua中的模塊(module)機(jī)制有點(diǎn)類似于C語言的動態(tài)庫,可以將一些公共的代碼放在模塊中,以API的形式提供給Lua應(yīng)用腳本使用。使用模塊或許還可以做成像Android的Application Frameworks,建立一種新的應(yīng)用程序編程模型,只是猜想。

模塊最簡單的使用方式:

  1. view plaincopy to clipboardprint?require “os”    
  2. os.clock()    
  3. require “os”  
  4. os.clock()  

table

Lua語言共有8中數(shù)據(jù)類型,其中table(表)類型實(shí)現(xiàn)了“關(guān)聯(lián)數(shù)組(associative array)”。table中可以保存各種數(shù)據(jù)類型。和table關(guān)聯(lián)的metatable,它定義了表的操作的一些行為,比如: 使用+操作時,會去查找metatable的屬性__add,有的話執(zhí)行。

function

function是Lua中8中基本類型之一,和其它類型一樣可以作為值傳遞。和function有關(guān)聯(lián)的表是環(huán)境表(environment),可以認(rèn)為是function的執(zhí)行環(huán)境??梢酝ㄟ^setfenv()和getfenv()來設(shè)置和獲取函數(shù)的環(huán)境表。函數(shù)中對于全局的操作,比如:定義全局變量等;就是在這個表中進(jìn)行的。多個函數(shù)可以共享一個表

require

當(dāng)使用require加載一個模塊時,實(shí)際上做了如下的事情:

在表package.loaded中查找模塊是否存在,有的話就返回該值??梢允褂萌缦潞瘮?shù)輸出表中的內(nèi)容

  1. view plaincopy to clipboardprint?function walkTable(t)    
  2.        for k,v in pairs(t) do    
  3.               print("+++",k,v,"+++")    
  4.        end    
  5. end    
  6. function walkTable(t)  
  7.        for k,v in pairs(t) do  
  8.               print("+++",k,v,"+++")  
  9.        end  
  10. end  

package.loaded中的內(nèi)容如下,其中包含了一些默認(rèn)加載的庫和全局表_G

  1. view plaincopy to clipboardprint?+++ string      ,      table: 003B82B0     +++    
  2. +++ debug      ,      table: 003B9300      +++    
  3. +++ package   ,      table: 003B5C30     +++    
  4. +++ _G   ,      table: 003B2E10     +++    
  5. +++ io     ,      table: 003B7320      +++    
  6. +++ os    ,      table: 003B7988      +++    
  7. +++ table ,      table: 003B51E0     +++    
  8. +++ math       ,      table: 003B8728      +++    
  9. +++ coroutine ,      table: 003B59D8     +++    
  10. +++ string      ,      table: 003B82B0     +++  
  11. +++ debug      ,      table: 003B9300      +++  
  12. +++ package   ,      table: 003B5C30     +++  
  13. +++ _G   ,      table: 003B2E10     +++  
  14. +++ io     ,      table: 003B7320      +++  
  15. +++ os    ,      table: 003B7988      +++  
  16. +++ table ,      table: 003B51E0     +++  
  17. +++ math       ,      table: 003B8728      +++  
  18. +++ coroutine ,      table: 003B59D8     +++  

為模塊查找加載器(loader),查詢package.preload,通常為空

加載Lua文件使用loadfile函數(shù)。loadfile會將文件當(dāng)作函數(shù)來加載,require會將模塊名作為參數(shù)傳給該函數(shù)。若有返回值則將返回值放入表package.loaded中。若沒有則返回表package.loaded中的值。

module  

當(dāng)在模塊文件中使用module函數(shù)的時候,如下所示;

  1. view plaincopy to clipboardprint?module “mymodule”    
  2. module “mymodule” 

實(shí)際上等同于以下的語句:

  1. view plaincopy to clipboardprint?local modname = “mymodule”     – 定義模塊名    
  2. local M = {}                               -- 定義用于返回的模塊表    
  3. _G[modname] = M                      -- 將模塊表加入到全局變量中    
  4. package.loaded[modname] = M    -- 將模塊表加入到package.loaded中,防止多次加載    
  5. setfenv(1,M)                -- 將模塊表設(shè)置為函數(shù)的環(huán)境表,這使得模塊中的所有操作是以在模塊表中的,這樣定義函數(shù)就直接定義在模塊表中    
  6. local modname = “mymodule”     – 定義模塊名  
  7. local M = {}                       -- 定義用于返回的模塊表  
  8. _G[modname] = M                      -- 將模塊表加入到全局變量中  
  9. package.loaded[modname] = M    -- 將模塊表加入到package.loaded中,防止多次加載  
  10. setfenv(1,M)                  -- 將模塊表設(shè)置為函數(shù)的環(huán)境表,這使得模塊中的所有操作是以在模塊表中的,這樣定義函數(shù)就直接定義在模塊表中  

通過module(),可以方便的編寫模塊中的內(nèi)容。

測試環(huán)境

  1. lua for windows IDE 

小結(jié):關(guān)于Lua Module機(jī)制分析的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-08-23 14:33:51

Lua捕獲字符串

2011-08-24 15:42:38

LUA源代碼

2011-08-29 15:53:04

Lua位運(yùn)算

2011-08-25 15:41:42

Lua源碼

2011-08-24 16:24:54

Lua源代碼

2011-08-24 17:19:20

Lua源文件

2021-02-22 11:30:07

Golang 1.16ModuleGolang

2011-08-25 15:51:10

Lua腳本

2011-08-25 14:03:32

UbuntuLUA安裝

2011-09-06 17:37:01

LUA應(yīng)用

2011-08-29 16:37:21

Lua協(xié)同線程

2011-08-24 14:33:14

LUA開發(fā)環(huán)境Decoda

2011-08-23 15:34:56

Lua模式 匹配

2011-08-25 17:25:55

LUADelphi

2011-08-24 14:14:13

LUA環(huán)境 配置

2009-11-09 17:55:13

WCF緩存

2011-09-01 17:46:22

MySQL ProxyLua腳本

2011-08-25 15:21:02

Lua字符串

2011-08-23 16:37:05

Lua數(shù)學(xué)庫

2011-08-25 16:28:23

Lua綁定系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號