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

Error

C++博客 首頁 新隨筆 聯系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks

主要翻譯自lua文檔,加上了programming lua中自己的一些理解

require(modname)

加載給定的模塊.函數首先檢查表package.loaded來判定modname是否已經存在.如果存在,則require返回package.loaded[modname]所存儲的值否則它嘗試為模塊找到一個加載器(loader).

要找到一個加載器,require首先查詢package.preloaded[modname].如果它有值,該值(應該是一個函數)就是加載器.如果沒值require使用package.path中存儲的路徑查找一個Lua的加載器.如果該查找也失敗,它使用package.cpath中存儲的路徑查找一個C語言加載器(C loader).如果還是失敗,它嘗試使用all-in-one加載器(如下)

當加載一個C庫的時候,require首先使用動態鏈接工具將應用程序與庫連接起來.之后它嘗試找到一個該庫中的C函數,該函數要被當做加載器使用.這個C函數的名稱是字符串"luaopen_"連接著復制的模塊名(模塊名稱中的每個點號"."都被替換為一個下劃線).此外,如果模塊名稱含有連字符"-",則第一個連字符的前綴(包括連字符)都被移除.比如,如果模塊名稱是a.v1-b.c,則函數名稱將是luaopen_b_c.

如果require即沒有為模塊找到一個Lua庫也沒有為模塊找到一個C庫,他將調用all-in-one加載器.該加載器為給定模塊的根名稱查找C路徑找到對應庫(原文:this loader searches the C path for a library for the root name of the given module).例如,當require a.b.c時,它將為a查找一個庫.如果找到,它查詢該庫內部為子模塊找到一個開放函數(open function);在我們這個例子中將會是luaopen_a_b_c.使用這個便利機制(facility),一個包可以將幾個子模塊打包進單個的庫中,同時每個子模塊保存著它本來的開放函數.

一旦找到一個加載器,require使用單個的參數modname調用加載器.如果加載器返回任何值,require將其賦值給package.loaded[modname].如果加載器沒有返回值且沒有給package.loaded[modname]賦與任何值,則require為該條目賦值為true.無論如何,require返回package.loaded[modname]的最終值.

如果加載或者運行模塊有任何錯誤,或者他不能為模塊找到一個加載器,則require發出一個錯誤信號.

require函數的實現原理如下:

 

  1. --require 函數的實現  
  2. function require(name)  
  3.     if not package.loaded[name] then  
  4.         local loader = findloader(name) //這一步演示在代碼中以抽象函數findloader來表示  
  5.         if loader == nil then  
  6.             error("unable to load module" .. name)  
  7.         end  
  8.         package.loaded[name] = true  
  9.         local res = loader(name)  
  10.         if res ~= nil then  
  11.             package.loaded[name] = res  
  12.         end  
  13.     end  
  14.     return package.loaded[name]  
  15. end  

 

package.cpath

由require使用查找C加載器的路徑

Lua初始化C路徑package.cpath的方法與初始化Lua路徑package.path的相同,使用LUA_CPATH中的環境變量(另外一個默認的路徑在luaconf.h中定義)

package.loaded

一個用于控制哪些模塊已經加載的表,該表由require使用.當require一個模塊名為modname的模塊且package.loaded[modname]不為false時,require僅返回package.loaded[modname]存儲的值.

package.loadlib(libname,funcname)

使用C庫libname動態鏈接到宿主程序.在這個庫中,尋找函數funcname并將該函數作為一個C函數返回.(所以,funcname必須遵守協議(參見lua_CFunction)).

這是一個底層函數.它完全繞過了package和module系統.與require不同,它不執行任何路徑查找且不自動添加擴展名.libname必須是C庫中完整的文件名,如果必要的話還要包含路徑和擴展名.funcname必須是原封不動的C庫中導出的名字(這可能取決于使用的C編譯器和鏈接器).

這個函數不被ANSI C支持.就其本身而言,它只在一些平臺上才能使用(Windows,Linux,Mac OS X,Solaris,BSD,加上其他支持dlfcn標準的Unix系統)

package.path

require用于查找Lua加載器的路徑

在啟動時,Lua使用環境變量LUA_PATH或者如果環境變量未定義就使用luaconf.h中定義的默認值來初始化該值.環境變量中的任何"::"都被替換為默認路徑.

路徑是一系列由分號隔開的模板(templates).對于每個模板,require將每個模板中的問號替換為filename,filename是modname中每個點都被替換成"目錄分隔符"(比如Unix中的"/")(這句感覺翻譯不準確,原文:For each template,require will change each interrogation mark in the template by filename,which is modname with each dot replaced by a "directory separator"(such as "/" in Unix));之后他將加載產生的文件名.因此,舉個例子,如果Lua路徑是"./?.lua;./?.lc;/usr/local/?/init.lua",為模塊foo查找一個Lua加載器將會嘗試以如下順序加載文件./foo.lua,./foo.lc和/usr/local/foo/init.lua

package.preload

為特定模塊存儲加載器的一個表(參見require)

package.seeall(module)

為module設置一個元表,module的__index只想全局環境(global environment),以便該module繼承全局環境中的值.作為函數module中的一個選項來使用.

在Programming Lua中是這么講的:

默認情況下,module不提供外部訪問.必須在調用它之前,為需要訪問的外部函數或模塊聲明適當的局部變量.也可以通過繼承來實現外部訪問,只需在調用module時附加一個選項package.seeall.這個選項等價于如下代碼:

 

  1. setmetatable(M,{__index = _G})  
因而只需這么做:

 

 

  1. module(...,package.seeall)  

module(name,[,...])

 

創建一個模塊.如果在package.loaded[name]中有表,該表便是創建的模塊.否則,如果有一個全局表t其名稱與給定名稱相同,則該全局表便是創建的模塊.否則創建一個新的表t

posted on 2015-04-06 16:31 Enic 閱讀(318) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产无遮挡一区二区三区毛片日本| 欧美大片一区二区三区| 久久久五月婷婷| 一区二区三区产品免费精品久久75| 欧美成年人视频| 麻豆精品网站| 久热精品在线视频| 玖玖精品视频| 美女主播一区| 国产一区导航| 激情久久五月天| 狠狠综合久久av一区二区小说| 国产一区二区久久精品| 国产一区清纯| 国产自产高清不卡| 国产综合视频| 亚洲国产成人91精品| 一区二区在线视频| 香蕉久久夜色精品国产| 99re这里只有精品6| 亚洲黄色在线视频| 美女网站在线免费欧美精品| 女女同性精品视频| 日韩小视频在线观看| 一区二区三区免费看| 亚洲欧美一区二区三区久久| 久久精品视频一| 欧美成人三级在线| 国产精品视频午夜| 亚洲激情在线播放| 亚洲欧美视频| 亚洲激情影院| 久久久久久久激情视频| 国产精品久久久久久亚洲毛片 | 国产九九视频一区二区三区| 国产婷婷色一区二区三区四区| 亚洲高清久久| 亚洲欧美在线免费观看| 久久综合九色综合欧美就去吻 | 久久久青草青青国产亚洲免观| 美女尤物久久精品| 国产精品久久久久久久久久尿 | 久久久999精品视频| 欧美一区二区三区精品电影| 欧美一级在线视频| 久久精品人人做人人爽| 午夜精品理论片| 日韩一区二区免费高清| 亚洲视频在线观看网站| 欧美在线视频不卡| 免费成人美女女| 久久亚洲一区| 欧美日本乱大交xxxxx| 午夜精品久久久| 99riav久久精品riav| 麻豆久久婷婷| 欧美一二三区精品| 欧美极品一区二区三区| 正在播放亚洲一区| 亚洲一区二区三区四区中文| 国产精品久久一卡二卡| 亚洲精品日韩一| 国产一区免费视频| 亚洲国产视频一区| 欧美日韩国产91| 久久夜色精品一区| 黄色成人精品网站| 国产一区二区成人| 久久夜精品va视频免费观看| 亚洲欧美精品在线观看| 日韩午夜av| 国产偷久久久精品专区| 老鸭窝毛片一区二区三区| 小黄鸭精品aⅴ导航网站入口| 国产噜噜噜噜噜久久久久久久久| 久久全国免费视频| 欧美性大战久久久久久久| 久久久www成人免费无遮挡大片| 欧美r片在线| 久久―日本道色综合久久| 久久亚裔精品欧美| 麻豆久久婷婷| 99国产麻豆精品| 久久精品综合一区| 亚洲天堂免费观看| 国产精品美女主播| 亚洲欧美激情精品一区二区| 亚洲国产欧美精品| 欧美一区二区三区免费看| 亚洲精品看片| 免费观看日韩av| 激情视频一区二区| 亚洲高清资源| 免费不卡中文字幕视频| 亚洲高清免费在线| 欧美xxx成人| 99精品视频免费观看视频| 伊人久久男人天堂| 久久久久久久一区二区三区| aⅴ色国产欧美| 欧美在线www| 亚洲调教视频在线观看| 欧美视频二区| 午夜精品国产更新| 亚洲一区二区三区涩| 欧美性大战久久久久| 欧美中文日韩| 欧美中文字幕在线| 欧美在线视频不卡| 欧美剧在线观看| 亚洲一区二区三区在线看| 日韩亚洲在线观看| 欧美日韩一区在线播放| 国产欧美一区二区三区久久| 久久久国产一区二区| 久久久亚洲一区| 亚洲欧美日韩第一区| 亚洲免费一区二区| 亚洲毛片网站| 亚洲一区亚洲二区| 午夜精品视频在线| 国产精品久久久久久久久久直播| 久久精品亚洲乱码伦伦中文 | 欧美日韩国产在线播放网站| 亚洲午夜精品一区二区三区他趣| 亚洲视频一区| 在线播放视频一区| 亚洲看片免费| 国产一区视频在线看| 欧美国产精品va在线观看| 欧美日韩综合在线| 美女精品网站| 欧美午夜精品久久久久久超碰| 洋洋av久久久久久久一区| 久久精品盗摄| 久久夜精品va视频免费观看| 亚洲国产第一页| 中文av字幕一区| 亚洲黄色免费网站| 欧美一级播放| 亚洲已满18点击进入久久| 久久免费国产精品| 亚洲性图久久| 99国产精品私拍| 亚洲一区二区三区精品视频| 欧美顶级艳妇交换群宴| 男女激情久久| 国产综合在线看| 久久久91精品国产| 亚洲欧美日韩一区二区在线 | 久久婷婷麻豆| 久久精品国产99国产精品澳门| 男人的天堂亚洲| 久久人人爽人人| 国产一区二三区| 亚洲经典三级| 欧美日韩免费高清一区色橹橹| 久久综合久久综合久久综合| 国产精品永久免费视频| 一区二区三区黄色| 亚洲图片在线| 欧美激情中文不卡| 午夜精品久久久久99热蜜桃导演| 欧美日产一区二区三区在线观看| 欧美一级视频一区二区| 午夜精品一区二区三区在线| 久久综合狠狠| 亚洲黄网站在线观看| 国产亚洲人成网站在线观看| 亚洲天天影视| 性色一区二区三区| 国产精品免费视频xxxx| 亚洲午夜精品视频| 亚洲国产日韩在线| 欧美粗暴jizz性欧美20| 亚洲国产成人午夜在线一区 | 国产精品视屏| 午夜亚洲影视| 久久蜜桃精品| 国产乱肥老妇国产一区二| 午夜精品亚洲| 老司机免费视频一区二区| 激情久久五月| 欧美激情片在线观看| 噜噜噜91成人网| 免费成人黄色| 999亚洲国产精| 欧美亚洲综合另类| 国产一区二区无遮挡| 久久综合九色欧美综合狠狠| 模特精品在线| 一区二区三区日韩| 国产精品亚洲综合| 久久久精品999| 久久精品一二三区| 亚洲日本va午夜在线影院| 久久青青草综合| 亚洲黄网站在线观看| 欧美在线视频不卡| 亚洲精选久久|