lua中的require机制
原文:http://blog.chinaunix.net/uid-552961-id-2736410.html 1、require机制相关的数据和函数package.path:保存加载外部模块(lua中”模块”和”文件”这两个概念的分界比较含糊,因为这个值在不同的时刻会扮演不同的角色)的搜索 路径,这种路径是”模板式的路径”,它里面会包含可替代符号”?”,这个符号会被替换,然后lua查找这个文件是否存在,如果存在就会调用其中特定的接 口。典型的值为: package.cpath:作用和packag.path一样,但它是用于加载第三方c库的。它的初始值可以通过环境变量 LUA_CPATH来设置 package.loadlib(libname,func):相当与手工打开c库libname,并导出函数func返回,loadlib其实是ll_loadlib 2.require的处理流程:require(modelname) 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |