一、require
require(moduleName):用来加载模块;其参数只要是文件名即可;利用模式匹配搜索加载文件;require只会被调用执行一次,会判断文件是否被加载避免重复加载;
(1)模式匹配
require的路径是一个模式列表,每一个模式指明一种由虚文件名(require的参数)转成实文件名的方法;每一个模式是一个包含可选的问号的文件名。匹配的时候Lua会首先将问号用虚文件名替换,然后看是否有这样的文件存在。如果不存在继续用同样的方法用第二个模式匹配;例如:
?;?.lua;c:\windows\?;/usr/local/lua/?/?.lua
require "test" --会试图打开以下文件进行匹配
test
test.lua
c:\windows\test
/usr/local/lua/test/test.lua
(2)lua中require的加载模块过程
a.首先在package.loaded查找modelname 如果该模块已经存在 则直接返回它的值
b.未找到 在package.perload查找modelname 如果找到一个函数与传入的modelname相同 则将其作为该模块的加载器
c.b步骤未找到 则根据package.path的模式查找lua库中的modelname 顶层lua库与文件名相同
可以直接通过lua文件直接完成loader的初始化过程
d.C步骤未找到 则根据package.cpath查找C库 lua先动态加载C库 之后在C库找并调用相应名字的借口
e.以第一个"."为分割 将模块划分成(main,