青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

colorful

zc qq:1337220912

 

lua中的require機制

http://blog.chinaunix.net/uid-552961-id-2736410.html

lua中的require機制

    為了方便代碼管理,通常會把lua代碼分成不同的模塊,然后在通過require函數把它們加載進來。
現在看看lua的require的處理流程。

1、require機制相關的數據和函數
    package.path:保存加載外部模塊(lua中"模塊"和"文件"這兩個概念的分界比較含糊,因為這個值在不同的時刻會扮演不同的角色)的搜索 路徑,這種路徑是"模板式的路徑",它里面會包含可替代符號"?",這個符號會被替換,然后lua查找這個文件是否存在,如果存在就會調用其中特定的接 口。典型的值為:
    "./?.lua;./?.lc;/usr/local/?/init.lua"
    如果lua代碼中調用:require("hello.world")
    那么lua會依次查找:
    ./hello/world.lua ==>這里"hello.world"變成了"hello/world",并替換了模型"./?.lua"
    ./hello/world.lc
    .....
    (這種處理方式和python類似,只不過不需要__init__.py,也有調用python中的__init__.py)
    package.path在虛擬機啟動的時候設置,如果存在環境變量LUA_PATH,那么就用該環境變量作為
    它的值,并把這個環境變量中的";;"替換為luaconf.h中定義的默認值,如果不存在該變量就直接使用
    luaconf.h定義的默認值
    
    package.cpath:作用和packag.path一樣,但它是用于加載第三方c庫的。它的初始值可以通過環境變量
    LUA_CPATH來設置
    
    package.loadlib(libname, func):相當與手工打開c庫libname, 并導出函數func返回,loadlib其實是ll_loadlib
    

2.require的處理流程:
   require(modelname)
   require(在lua中它是ll_require函數)的查找順序如下:
       a.首先在package.loaded查找modelname,如果該模塊已經存在,就直接返回它的值
       b.在package.preload查找modelname, 如果preload存在,那么就把它作為loader,調用loader(L)
       c.根據package.path的模式查找lua庫modelname,這個庫是通過module函數定義的,對于頂層的lua庫,文件名和庫名是一 樣的而且不需要調用顯式地在lua文件中調用module函數(在ll_require函數中可以看到處理方式),也就是說lua會根據lua文件直接完 成一個loader的初始化過程。
       d.根據package.cpath查找c庫,這個庫是符合lua的一些規范的(export具有一定特征的函數接口),lua先已動態的方式加載該c庫,然后在庫中查找并調用相應名字的接口,例如:luaopen_hello_world
       e.已第一個"."為分割,將模塊名劃分為:(main, sub)的形式,根據package.cpath查找main,如果存在,就加載該庫并查詢相應的接口:luaopen_main_sub,例如:先查找 hello庫,并查詢luaopen_hello_world接口
       f.得到loder后,用modname作為唯一的參數調用該loader函數。當然參數是通過lua的棧傳遞的,所以loader的原型必須符合lua的規范:int LUA_FUNC(lua_State *L)
         
       ll_require會將這個loader的返回值符給package.loaded[modelname],如果loader不返回值同時 package.loaded[modelname]不存在時, ll_require就會把package.loaded[modelname]設為true。最后ll_reuqire把package.loaded [modelname]返回給調用者。
    

3.module的處理流程
    module(name, cb1, cb2, ...)
    
    a.如果package.loaded[name]是一個table,那么就把這個table作為一個mod
    b.如果全局變量name是一個table,就把這個全局變量作為一個mod
    c.創建table:t = {[name]=package.loaded[name], ["_NAME"]=name, ["_M"]=t, ["_PACKAGE"]=*name*(刪除了最后的".XXXX"部分)}. 如果name是一個以點分割的串,那么得到的mod類似這個樣子:
      hello.world==> {["hello"]={["world"]={XXXXXXX}}}
    d.依次調用cbs:
      cb1(mod), cb2(mod),...
      
    e.將當前模塊的環境設置為mod,同時把package.loaded[name] = mod    
    

  清楚了lua關于模塊的處理,就比較容易理解寫lua擴展的細節了^_^。

posted on 2014-08-21 17:08 多彩人生 閱讀(367) 評論(0)  編輯 收藏 引用 所屬分類: lua

導航

統計

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产一级一区二区| 亚洲激情视频在线| 国产亚洲一级高清| 日韩视频在线观看国产| 久久久久国色av免费观看性色| 免费在线观看成人av| 亚洲午夜久久久久久尤物 | 欧美成人精品在线播放| 亚洲精品久久久久久一区二区| 香蕉久久精品日日躁夜夜躁| 国产综合久久| 午夜欧美精品| 亚洲一区久久| 国产精品成人一区二区网站软件| 9久草视频在线视频精品| 国产深夜精品福利| 久久精品在线| 欧美一区91| 国内久久精品| 一区二区三区精品视频在线观看| 欧美激情亚洲国产| 欧美激情国产精品| 日韩视频一区二区| 亚洲人成毛片在线播放| 欧美国产免费| 亚洲一区二区成人| 亚洲视频每日更新| 国产欧美精品xxxx另类| 久久久久久久一区二区三区| 欧美中文字幕第一页| 红桃视频一区| 欧美激情按摩在线| 欧美日韩国产高清视频| 在线观看欧美日韩| 欧美激情一区二区三级高清视频 | 国产精品你懂的在线| 亚洲欧美伊人| 久久高清一区| 国产精品久久久久国产a级| 欧美与黑人午夜性猛交久久久| 久久精品水蜜桃av综合天堂| 最新国产拍偷乱拍精品| 91久久中文字幕| 国产精品高潮呻吟久久| 久久精品成人| 免费在线观看日韩欧美| 亚洲一区二区三区视频| 欧美在线日韩| 亚洲乱码国产乱码精品精| 日韩亚洲欧美高清| 国外成人网址| 亚洲国产一区二区三区在线播| 国产精品wwwwww| 久久这里有精品视频| 欧美黄污视频| 国产伦精品一区二区三| 亚洲人在线视频| 国产在线不卡精品| 亚洲精品欧美一区二区三区| 国产热re99久久6国产精品| 欧美肥婆在线| 国产三区二区一区久久| 亚洲国产精品专区久久| 国产一区二区日韩| 日韩一级欧洲| 91久久久亚洲精品| 欧美一区二区三区视频在线观看| 日韩一级黄色av| 夜夜爽www精品| 一区二区久久久久久| 亚洲精品裸体| 国产精品一区二区三区久久 | 久久香蕉精品| 欧美日韩亚洲一区二区三区| 久久精品在线| 国产精品久久久久久久久搜平片| 午夜视频久久久久久| 欧美理论视频| 牛牛影视久久网| 国产乱肥老妇国产一区二| 亚洲国产精品va在线看黑人| 国产婷婷色一区二区三区| 亚洲另类一区二区| 在线电影国产精品| 性久久久久久久久久久久| 在线精品亚洲| 久久资源在线| 久久午夜国产精品| 亚洲国产精品久久| 在线观看一区视频| 亚洲日本一区二区三区| 一区免费在线| 久久er99精品| 久久国产手机看片| 国产精品永久入口久久久| 欧美aa国产视频| 国产一区白浆| 性欧美超级视频| 欧美一区二区三区在线免费观看| 欧美三级在线播放| 亚洲精品日本| 激情综合在线| 久久久精品日韩欧美| 欧美影院成人| 国产欧美综合一区二区三区| 亚洲免费视频一区二区| 午夜久久黄色| 国产欧美一区二区三区久久| 亚洲欧美日韩成人| 久久大逼视频| 国产一区二区日韩| 久久婷婷成人综合色| 欧美插天视频在线播放| 一区免费观看| 欧美阿v一级看视频| 亚洲激情av在线| 国产在线视频欧美一区二区三区| 亚洲精品久久久久久久久久久久| 日韩午夜三级在线| 欧美精品在线视频观看| 国产精品黄页免费高清在线观看| 一区二区三区 在线观看视频 | 韩国女主播一区| 欧美与欧洲交xxxx免费观看| 久久精品亚洲国产奇米99| 国产一区二区三区直播精品电影| 久久成人资源| 午夜久久久久久| 在线欧美一区| 欧美激情视频给我| 日韩视频中文字幕| 欧美亚洲视频一区二区| 国产一区二区中文| 亚洲精品资源| 99国产精品视频免费观看| 美女久久一区| 亚洲国产成人午夜在线一区| 亚洲作爱视频| 国产精品香蕉在线观看| 欧美亚洲综合久久| 欧美激情免费观看| 亚洲免费一区二区| 欧美a级片一区| 一区二区三区高清| 国产毛片一区| 免费久久99精品国产| 一卡二卡3卡四卡高清精品视频| 午夜精品免费在线| 亚洲高清成人| 国产精品乱人伦一区二区| 久久精品视频在线| 欧美黄色小视频| 久久精品91| 在线一区免费观看| 韩国精品主播一区二区在线观看| 欧美另类高清视频在线| 欧美在线二区| 一区二区三区日韩欧美| 亚洲电影在线| 日韩午夜中文字幕| 国产精品一区久久| 亚洲免费视频观看| 欧美在线视频一区| 国产精品青草久久久久福利99| 亚洲精品欧美日韩| 欧美在线视频在线播放完整版免费观看| 午夜国产精品视频| 国内精品模特av私拍在线观看 | 午夜影院日韩| 久久精品国产成人| 国产一区日韩欧美| 欧美成人一区二区三区片免费| 亚洲欧洲一区二区在线观看| 国产专区欧美专区| 欧美在现视频| 欧美激情精品久久久久久| 亚洲国产精彩中文乱码av在线播放| 麻豆av福利av久久av| 亚洲精品一区在线观看| 欧美一区二区三区视频| 国产精品婷婷午夜在线观看| 久久久www成人免费毛片麻豆| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲美女91| 国产伦精品一区二区| 欧美成人资源网| 在线一区二区日韩| 久久影视精品| 亚洲网站在线看| 国内视频一区| 欧美日韩三级| 久久久久国产一区二区| 欧美99在线视频观看| 亚洲综合999| 亚洲高清久久| 国产欧美婷婷中文| 欧美国产日韩精品| 久久成人羞羞网站| 一本色道久久综合狠狠躁的推荐| 国产婷婷97碰碰久久人人蜜臀|