成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解析LUA中關于Package定義學習筆記

移動開發 iOS
LUA中關于Package定義學習筆記是本文要介紹的內容,主要是來學習lua中對Package,具體內容倆看本文詳解。Package是個很邏輯的概念。也就是說很可能不是語言直接提供的設施。

LUA中關于Package定義學習筆記是本文要介紹的內容,主要是來學習lua中對Package,具體內容倆看本文詳解。Package是個很邏輯的概念。也就是說很可能不是語言直接提供的設施。cpp里的namespace可以用來實現package,在LUA中則是依靠table機制來實現。實現的方式大同小異,本文總結了在《lua中文手冊》中出現的3種方式。

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

  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 

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

這是最直接***理解的一種Package定義方式,但是有一定的弊端。這個弊端主要體現在Package的實現過程中。可以看到,即使在

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

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

方式二: 使用局部函數定義所有的Package內函數,然后在Package的結尾處將需要公開的函數直接放入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 

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

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

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

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

小結:解析LUA中關于Package定義學習筆記的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-08-23 17:33:08

LuaMetatable

2011-08-23 16:22:45

Lua 4.0函數

2009-08-12 15:55:12

C#接口定義

2011-08-23 16:48:41

Lua 5.1API 函數

2011-08-23 16:14:27

Lua函數庫函數

2011-08-31 15:59:10

LUAWeb 開發

2011-09-01 14:14:00

jQuery Mobi

2011-08-23 16:37:05

Lua數學庫

2011-08-25 10:07:24

Lua 5.0函數編譯器

2011-08-29 10:01:27

QTWebkit插件

2011-08-23 11:13:56

Lua

2011-08-24 17:09:35

LUA閉包函數

2011-08-29 16:37:21

Lua協同線程

2011-08-22 11:35:07

Xcode

2011-08-25 11:44:21

LUA腳本魔獸世界

2011-08-23 17:06:03

2011-08-24 13:27:07

Lua 游戲C接口腳本

2011-08-25 14:43:55

LUA對象序列化

2011-08-24 14:14:13

LUA環境 配置

2011-08-23 15:34:56

Lua模式 匹配
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产黄色大片在线观看 | 91精品国模一区二区三区 | 久久久久黄 | 久久亚洲国产 | 97视频精品 | 三级视频国产 | 成人免费福利视频 | 久久久久久久久久久久一区二区 | 日韩精品无码一区二区三区 | 97精品超碰一区二区三区 | 国产视频第一页 | 精品美女视频在线观看免费软件 | 狠狠躁夜夜躁人人爽天天高潮 | 亚洲午夜视频在线观看 | 国产欧美一区二区三区久久 | 风间由美一区二区三区在线观看 | 午夜影院普通用户体验区 | 日韩在线精品 | 91社区视频| 在线观看国产视频 | 91原创视频 | 亚洲一一在线 | 色综合色综合色综合 | 黄色毛片在线播放 | 国产一伦一伦一伦 | 亚洲综合色自拍一区 | 久久成人午夜 | 亚洲一区日韩 | 日韩精品一区二区三区视频播放 | 久久精品国产亚洲 | 91精品国产综合久久婷婷香蕉 | 中国美女一级黄色片 | 男人的天堂在线视频 | 成人精品国产免费网站 | 欧美一页 | 欧美一区二区三区在线播放 | 最近最新中文字幕 | 国产免费观看久久黄av片涩av | 欧美不卡一区二区三区 | 91av视频在线| 色香婷婷 |