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

解析LUA中關(guān)于Package定義學(xué)習(xí)筆記

移動(dòng)開發(fā) iOS
LUA中關(guān)于Package定義學(xué)習(xí)筆記是本文要介紹的內(nèi)容,主要是來學(xué)習(xí)lua中對(duì)Package,具體內(nèi)容倆看本文詳解。Package是個(gè)很邏輯的概念。也就是說很可能不是語言直接提供的設(shè)施。

LUA中關(guān)于Package定義學(xué)習(xí)筆記是本文要介紹的內(nèi)容,主要是來學(xué)習(xí)lua中對(duì)Package,具體內(nèi)容倆看本文詳解。Package是個(gè)很邏輯的概念。也就是說很可能不是語言直接提供的設(shè)施。cpp里的namespace可以用來實(shí)現(xiàn)package,在LUA中則是依靠table機(jī)制來實(shí)現(xiàn)。實(shí)現(xiàn)的方式大同小異,本文總結(jié)了在《lua中文手冊(cè)》中出現(xiàn)的3種方式。

方式一: 直接將所有組成包的數(shù)據(jù)和方法定義在包中,代碼看起來像是這樣:

  1. vector3d = {}  -- 包名  
  2. function vector3d.function1()  
  3. ......  
  4. end  
  5. function vector3d.function2()  
  6. ......  
  7.       if (vector3d.function1()) then  
  8.       ......  
  9.       end  
  10. end  
  11. return vector3d 

這樣定義的就是一個(gè)vector3d包,使用require語言打開這個(gè)包后,就可以使用 vector3d.function1和vector3d.function2這兩個(gè)函數(shù)了。

這是最直接***理解的一種Package定義方式,但是有一定的弊端。這個(gè)弊端主要體現(xiàn)在Package的實(shí)現(xiàn)過程中??梢钥吹?,即使在

vector3d.function2()中使用function1()函數(shù),也必須完整的加上vector3d包名,否則無法進(jìn)行函數(shù)調(diào)用。Package的作者要稍微累一點(diǎn),不過使用者倒是還好。特別的注意***的 return vector3d 語句,有了這句后調(diào)用者可以按照如下方式重命名包:

  1. MyPackage =  require "vector3d"  
  2. MyPackage.function2() 

方式二: 使用局部函數(shù)定義所有的Package內(nèi)函數(shù),然后在Package的結(jié)尾處將需要公開的函數(shù)直接放入Package中。代碼看起來像這樣:

  1. vector3d = {}  -- 包名  
  2. local function function1()  
  3. ......  
  4. end  
  5.  
  6. local function function2()  
  7. ......  
  8.       if (function1()) then  
  9.       ......  
  10.       end  
  11. end  
  12. vector3d = {function1 = functoin1,   
  13. function2function2 = function2  
  14. }  
  15. return vector3d 

***給包中賦值的部分就是將需要的接口公開的部分。這樣做的好處:不需要公開的函數(shù)可以完全隱藏起來(都是local函數(shù));Package內(nèi)部的各個(gè)函數(shù)相互之間調(diào)用的時(shí)候不再需要加Package名稱進(jìn)行區(qū)分; 可以按照需要隨意的重命名Package公開的接口名稱。這種方式的弊端在于定義的時(shí)候需要寫上local,這算不算弊端就看你了 - -。 就我個(gè)人而言,我還是比較喜歡這個(gè)定義方式。能明確的區(qū)分出接口和私有的定義,公開接口的名稱還可以隨意改變,這就意味著可以隨意替換內(nèi)部實(shí)現(xiàn)而不需要影響外部調(diào)用者。

無論用什么方法去定義Package,都是為了在邏輯上更好的規(guī)劃代碼層次。LUA中的table機(jī)制的確是一個(gè)活力無限的機(jī)制啊。Package依靠這個(gè)實(shí)現(xiàn),LUA本身自己有些機(jī)制也依賴于Table(比如全局變量就放在_G表中)

手冊(cè)里還有個(gè)如何"拆開"Package的代碼段,很好的展現(xiàn)了table的強(qiáng)大之處(Package也是在table上構(gòu)筑的邏輯產(chǎn)物)。將Package拆開的意思,就是將所有 Package中公開的名字放入_G表中。也就是讓 Package.A() 變成_G.A  (_G在一般情況下不需要寫,默認(rèn)引用了)

  1. function openpackage (ns)  
  2.       for n,v in pairs(ns)   
  3.      do  
  4.             _G[n] = v  
  5.      end  
  6. end 

小結(jié):解析LUA中關(guān)于Package定義學(xué)習(xí)筆記的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對(duì)你有所幫助!

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

2011-08-23 17:33:08

LuaMetatable

2011-08-23 16:22:45

Lua 4.0函數(shù)

2011-08-23 16:48:41

Lua 5.1API 函數(shù)

2011-08-23 16:14:27

Lua函數(shù)庫函數(shù)

2009-08-12 15:55:12

C#接口定義

2011-08-31 15:59:10

LUAWeb 開發(fā)

2011-09-01 14:14:00

jQuery Mobi

2011-08-23 16:37:05

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

2011-08-29 10:01:27

QTWebkit插件

2011-08-25 10:07:24

Lua 5.0函數(shù)編譯器

2011-08-23 11:13:56

Lua

2011-08-24 17:09:35

LUA閉包函數(shù)

2011-08-29 16:37:21

Lua協(xié)同線程

2011-08-22 11:35:07

Xcode

2011-08-25 11:44:21

LUA腳本魔獸世界

2011-08-25 14:43:55

LUA對(duì)象序列化

2011-08-24 13:27:07

Lua 游戲C接口腳本

2011-08-23 17:06:03

2011-08-23 15:34:56

Lua模式 匹配

2011-08-24 14:14:13

LUA環(huán)境 配置
點(diǎn)贊
收藏

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