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

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>
            国产性猛交xxxx免费看久久| 欧美国产精品v| 久久一二三四| 久久天堂成人| 久久久久久亚洲综合影院红桃| 久久国产精品久久久久久电车| 亚洲麻豆av| 一区二区高清视频在线观看| 中文精品在线| 久久久久久亚洲精品杨幂换脸 | 蜜桃久久av一区| 欧美国产日韩亚洲一区| 欧美日韩精品二区| 国产日韩欧美在线一区| 亚洲国产欧美一区二区三区同亚洲| 亚洲国产欧美一区二区三区久久| 亚洲最新视频在线| 久久aⅴ国产紧身牛仔裤| 老牛嫩草一区二区三区日本| 亚洲精品视频免费| 欧美在线观看你懂的| 男人的天堂亚洲| 国产精品国产三级国产普通话99 | 欧美一级片久久久久久久| 久久综合网络一区二区| 亚洲人成7777| 亚洲欧美国产77777| 另类天堂视频在线观看| 欧美视频一区二区三区…| 在线电影国产精品| 久久精品观看| 亚洲一品av免费观看| 欧美大片网址| 在线精品亚洲| 久久久久国产一区二区| 亚洲天堂网站在线观看视频| 欧美精品一区二区三区在线播放 | 久久久五月婷婷| 国产精品久久二区二区| 亚洲精品影视在线观看| 久久在线视频| 亚洲午夜激情| 欧美日韩不卡合集视频| 在线免费观看日本欧美| 久久久91精品| 在线一区亚洲| 欧美日韩在线精品| 99精品免费| 亚洲国产精品成人综合色在线婷婷| 久久精品成人| 99国产精品99久久久久久| 亚洲电影激情视频网站| 欧美一区二区视频在线观看| 国产精品入口日韩视频大尺度| 亚洲精品一区在线观看| 欧美 日韩 国产在线| 欧美一区二视频| 国产视频在线观看一区| 午夜精品久久久久久久久久久久| 日韩视频不卡| 国产精品久久久久久影视| 正在播放日韩| 中日韩午夜理伦电影免费| 国产精品久久久久免费a∨大胸| 999亚洲国产精| 亚洲精品色婷婷福利天堂| 欧美日韩免费观看一区三区 | 亚洲国产老妈| 亚洲国产精品美女| 欧美国产先锋| 在线综合亚洲| 亚洲欧美高清| 国产三区二区一区久久| 久久免费高清视频| 久久精品视频一| 亚洲人成在线免费观看| 夜久久久久久| 国内精品久久国产| 女人天堂亚洲aⅴ在线观看| 免费视频一区| 亚洲永久在线观看| 亚洲欧美视频在线| 亚洲第一区在线| 日韩视频二区| 国产又爽又黄的激情精品视频 | 国产亚洲欧美一区二区| 欧美成人dvd在线视频| 欧美jizzhd精品欧美巨大免费| 在线一区免费观看| 欧美一级视频| 9久re热视频在线精品| 亚洲欧美日产图| 亚洲日本成人在线观看| 亚洲午夜精品国产| 在线日本成人| 亚洲在线观看免费| 亚洲日韩第九十九页| 午夜国产不卡在线观看视频| 亚洲人永久免费| 亚洲一区亚洲二区| 亚洲精品之草原avav久久| 亚洲午夜一区| 日韩视频在线免费观看| 久久久国产一区二区| 日韩一级视频免费观看在线| 久久久www成人免费精品| 亚洲视频在线二区| 久久伊人精品天天| 久久黄色网页| 亚洲午夜久久久久久久久电影院| 久久日韩粉嫩一区二区三区| 亚洲一区在线看| 免费观看一区| 久久久久青草大香线综合精品| 欧美精品三区| 六月婷婷久久| 国产午夜精品在线| 一区二区三区久久网| 亚洲精品美女在线观看| 欧美中在线观看| 欧美在线免费| 国产精品进线69影院| 亚洲精品乱码视频| 亚洲精品视频免费观看| 久久综合九色欧美综合狠狠| 久久精品动漫| 国产欧美视频一区二区| 在线亚洲一区观看| 亚洲天堂免费在线观看视频| 欧美国产91| 亚洲精品免费看| 99国产精品久久| 欧美国产视频一区二区| 亚洲欧洲一区二区三区在线观看| 亚洲欧洲视频| 欧美精品1区2区| 亚洲激情一区| 一区二区三区国产精品| 欧美美女视频| 宅男精品导航| 久久精品男女| 亚洲高清一区二区三区| 免费影视亚洲| 亚洲精品久久| 亚洲综合国产| 国产亚洲欧美一区二区| 久久精品视频播放| 欧美国产成人在线| 亚洲最新合集| 欧美性理论片在线观看片免费| aa级大片欧美| 欧美亚洲三区| 伊人夜夜躁av伊人久久| 卡一卡二国产精品| 夜色激情一区二区| 欧美在线观看网站| 亚洲福利视频三区| 欧美日韩精品免费观看| 亚洲欧美综合国产精品一区| 久久精品一二三| 亚洲国产美女久久久久| 欧美日韩四区| 久久精品久久99精品久久| 亚洲电影免费在线| 亚洲一区二区三区四区五区午夜| 国产精品人人做人人爽| 久久嫩草精品久久久精品一| 亚洲国产成人tv| 午夜精品亚洲| 亚洲国产成人精品久久久国产成人一区 | 国产午夜亚洲精品羞羞网站| 另类成人小视频在线| 中文精品在线| 欧美激情aⅴ一区二区三区| 亚洲性视频h| 亚洲国产精品悠悠久久琪琪| 国产精品久久国产精麻豆99网站| 你懂的国产精品| 欧美精品久久一区| 羞羞视频在线观看欧美| 亚洲人成网站色ww在线| 欧美在线视频在线播放完整版免费观看| 精品成人国产在线观看男人呻吟| 欧美大片一区二区三区| 欧美一区二区久久久| 亚洲精品女人| 欧美影院成人| 亚洲一区免费| 亚洲国产日韩欧美| 国产精品一级二级三级| 欧美激情一二三区| 老色鬼精品视频在线观看播放| 亚洲天天影视| 夜夜精品视频一区二区| 欧美激情精品久久久久久蜜臀| 久久国产精品久久w女人spa| 一区二区三区久久久| 亚洲精品国产无天堂网2021| 伊人精品久久久久7777| 国产一区91精品张津瑜|