Cocos2d-x 加载模块

2019-09-30  本文已影响0人  白小白152

1. require(modName)

require会加载给定的模块,首先检查表package.loaded来判定模块是否已经存在。若存在则加载返回package.loaded[modName]所存储的值,否则尝试为模块找到一个加载器。

要找到一个加载器,require首先查询package.preload[modName],若有值且是一个函数则断定就是一个加载。若没有值require使用package.path中存储的路径查找一个Lua的加载器。若该查找也失败,则使用package.cpath中存储的路径查找一个C语言加载,若仍然失败则尝试使用all-in-one加载器。

当加载一个C语言库时,require首先使用动态链接工具将应用程序与库连接起来,之后尝试找到该库中的C函数,该函数要被当做加载器使用。这个C函数的名字是字符串luaopen_连接着复制的模块名。此外,若模块名称中函数连字符-,则第一个连字符的前缀包括连字符都会被移除。

require既没有为模块查找到一个Lua库,也没有为模块找到一个C库,它将调用all-in-one加载器。该加载器为给定模块的根名称,查找C路径并找到对应的库。

一旦找到一个加载器,require会使用单个参数modName调用加载器。若加载器返回任何值,则require会将其赋值给package.loaded[modName]。若加载器无返回值且没有给package.loaded[modName]赋与任何值,则require为该条目赋值为true。无论如何,require返回package.loaded[modName]的最终值。

若加载或运行模块有任何错误或不能为模块寻找一个加载器,则require会发出一个错误信号。

2. LuaLoadChunksFromZIP

requireLuaLoadChunksFromZIP的区别:

若加载到内存中的包,使用require就只能是完全能对应的包名,但若是文件的话可以在package.path中查找。

上一篇下一篇

猜你喜欢

热点阅读