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

colorful

zc qq:1337220912

 

lua中的require機(jī)制

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

lua中的require機(jī)制

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

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

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

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

  清楚了lua關(guān)于模塊的處理,就比較容易理解寫lua擴(kuò)展的細(xì)節(jié)了^_^。

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

導(dǎo)航

統(tǒng)計

常用鏈接

留言簿(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>
            亚洲美女毛片| 亚洲成人原创| 国产精品r级在线| 亚洲国产高清一区| 国产一区视频网站| 亚洲欧洲日本国产| 国产精品99久久久久久宅男 | 亚洲欧洲av一区二区| 亚洲精品日韩激情在线电影| 日韩写真视频在线观看| 欧美日韩在线视频一区| 亚洲一区二区三区三| 性欧美办公室18xxxxhd| 欧美日韩在线播放三区| 亚洲无人区一区| 久久久免费精品视频| 国产精品美女午夜av| 欧美高潮视频| aa成人免费视频| 一本色道久久综合狠狠躁篇的优点| 亚洲大片免费看| 国产精品欧美一区喷水| 亚洲欧美日韩国产成人精品影院| 亚洲第一精品夜夜躁人人躁| 久久久久免费观看| 国产欧美日韩免费| 久久久水蜜桃| 久久久综合网| 欧美日韩中文| 性娇小13――14欧美| 亚洲激情影院| 香蕉视频成人在线观看| 最新中文字幕亚洲| 国产欧美日韩麻豆91| 国产精品免费一区豆花| 欧美天天综合网| 欧美激情视频一区二区三区在线播放 | 欧美—级在线免费片| 亚洲一区二区三区在线看| 欧美激情影音先锋| 亚洲精品视频免费| 韩国av一区二区| 1024精品一区二区三区| 国产一区二区三区久久悠悠色av| 韩国久久久久| 日韩视频一区二区三区在线播放免费观看 | 亚洲日韩第九十九页| 久久久999精品| 久久久国产午夜精品| 欧美成人中文字幕| 亚洲国产小视频在线观看| 久久免费黄色| 欧美va天堂| 制服丝袜亚洲播放| 免费在线日韩av| 国产精品亚洲激情| 亚洲国产精品尤物yw在线观看| 国产色产综合产在线视频| 国产婷婷精品| 亚洲欧洲精品成人久久奇米网 | 久久久青草青青国产亚洲免观| 欧美在线综合| 欧美成人精品在线| 欧美日韩免费在线视频| 国模套图日韩精品一区二区| 国内精品久久久久影院色| 亚洲一区观看| 99国产精品| 国产精品盗摄久久久| 亚洲欧洲综合另类| 中文亚洲欧美| 国产精品国产三级欧美二区| 亚洲午夜精品久久| 欧美成人精品激情在线观看| 亚洲日本va在线观看| 亚洲欧美日本日韩| 欧美日本三级| 国产情人节一区| 久久久噜噜噜| 欧美影院一区| 亚洲免费在线| 一区二区三区www| 久久国产精品一区二区三区| 国产精品日韩| 亚洲欧美日韩精品久久| 久久av一区二区三区| 亚洲高清免费| 久久只有精品| 久久久综合激的五月天| 久久精品麻豆| 亚洲欧美日韩电影| 在线中文字幕日韩| 国产一区久久| 久久久精品一品道一区| 欧美人与禽猛交乱配视频| 亚洲精品乱码久久久久久蜜桃麻豆| 久久精品国产亚洲高清剧情介绍| 久久精品男女| av成人激情| 免费高清在线一区| 午夜精品久久久久久久蜜桃app| 蜜月aⅴ免费一区二区三区| 国产精品初高中精品久久| 久久综合网hezyo| 欧美 日韩 国产在线| 欧美护士18xxxxhd| 久久aⅴ国产紧身牛仔裤| 欧美激情网友自拍| 久久深夜福利| 美国成人直播| 欧美一区91| 国产精品劲爆视频| 午夜亚洲精品| 亚洲男人的天堂在线aⅴ视频| 久久久久久久久蜜桃| 久久久噜噜噜久久中文字免| 久久人人精品| 亚洲啪啪91| 黄色成人在线网址| 久久频这里精品99香蕉| 亚洲一区二三| 国产精品一区二区在线观看网站| 亚洲一区国产一区| 亚洲欧美日本精品| 国产精品一区二区三区观看| 亚洲人成网站色ww在线| 国产精品欧美久久久久无广告| 老司机精品导航| 91久久久久久国产精品| 欧美精品一区二区三区视频 | 亚洲精品美女在线| 欧美日韩一区成人| 亚洲午夜一级| 美女图片一区二区| 亚洲精品乱码| 欧美成人精品高清在线播放| 一本色道久久综合亚洲精品小说| 欧美激情在线有限公司| 亚洲欧美日韩精品一区二区| 久久先锋影音av| 久久久亚洲国产天美传媒修理工| 亚洲性夜色噜噜噜7777| 亚洲一区二区三区高清| 在线看片一区| 久久精品一区二区三区中文字幕 | 亚洲欧洲三级| 国产精品你懂的在线| 亚洲人成网站777色婷婷| 在线观看日韩| 亚洲欧美国产日韩中文字幕| 亚洲欧美日韩精品一区二区| 欧美偷拍一区二区| 亚洲图片欧美一区| 香蕉乱码成人久久天堂爱免费| 欧美色图首页| 亚洲小视频在线| 欧美一区永久视频免费观看| 国产性做久久久久久| 久久精品国产在热久久| 欧美成人午夜剧场免费观看| 亚洲国产va精品久久久不卡综合| 免费欧美电影| 一本色道久久综合亚洲精品婷婷| 亚洲女同同性videoxma| 国产婷婷一区二区| 免费欧美电影| 亚洲在线免费| 欧美国产精品v| 在线视频精品| 国内精品久久国产| 欧美成人精品影院| 中国av一区| 老司机精品久久| 亚洲视频在线观看一区| 国产一区二区三区四区| 美女日韩在线中文字幕| 亚洲天堂男人| 亚洲电影下载| 性色av一区二区怡红| 亚洲国产精品123| 国产精品久久福利| 久久综合中文| 亚洲欧美在线磁力| 亚洲日韩成人| 久久五月激情| 亚洲男人的天堂在线| 在线观看精品一区| 国产精品美女久久久久av超清 | 91久久极品少妇xxxxⅹ软件| 午夜天堂精品久久久久| 亚洲欧洲一二三| 国产一区二区三区最好精华液| 欧美理论视频| 久久人人爽爽爽人久久久| 中文亚洲字幕| 亚洲国产精品va在线看黑人 | 久久精品91久久久久久再现| 亚洲美女av网站| 永久久久久久| 午夜精品视频网站|