Lua的require使用

Lua的require使用,第1张

概述一.require的作用 加载指定的模块,相当与#include作用类似,加载了该模块,那么就可已使用模块中的全局函数和全局数据(如表等等) 注:实际上require “xxx”后,会将xxx中的全局函数和数据放到表_G中,所以也就能访问了。 2.例子 (1)main.lua require "test" require "showSome"(2)test.lua functi @H_404_2@ 一.require的作用 加载指定的模块,相当与#include作用类似,加载了该模块,那么就可已使用模块中的全局函数和全局数据(如表等等)
注:实际上require “xxx”后,会将xxx中的全局函数和数据放到表_G中,所以也就能访问了。 @H_419_13@

2.例子

(1)main.lua  require "test"  require "showSome"(2)test.lua  function CallFunc()  //这里能调用show(),证明了_G中有show这个元素    show()  end(3)showSome.lua  function show()    print("it is showsome")  end(4)testLua.cppint _tmain(int argc,_TCHAR* argv[]){    lua_State *L = luaL_newstate();    luaL_openlibs(L);    luaL_dofile(L,"Lua//main.lua");    lua_getglobal(L,"CallFunc");    lua_pcall(L,0,0);    return 0;}
二.require的搜索模块的路径

1.搜索lua文件的路径存放在变量package.path中,当lua启动后便以环境变量LUA_PATH的值来初始化这个变量,如果没有找到,则使用2中的的默认路径。如果lua还是无法找到与模块命符合的lua文件,那么它会开始找c程序库,路径储存在package.cpath中,这个变量通过环境变量LUA_CPATH来初始化。
2.require的默认路径在:luaconf.h中,我们打开该文件搜索:LUA_PATH_DEFAulT ,便可以看到
#deine LUA_PATH_DEFAulT \
LUA_LDIR”?.lua;” LUA_LDIR”?\init.lua;” \
LUA_CDIR”?.lua;” LUA_CDIR”?\init.lua;” \
LUA_SHRDIR”?.lua;” LUA_SHRDIR”?\init.lua;” \
“.\?.lua;” “.\?\init.lua;” \
LUA_CDIR”..\testLua\Lua\?.lua;” –这句是我自己加的

#deine LUA_CPATH_DEFAulT\
LUA_CDIR”?.dll;” \
LUA_CDIR”..\lib\lua\” LUA_VDIR “\?.dll;” \
LUA_CDIR”loadall.dll;” “.\?.dll”

注:
1.修改了luaconf.h中的路径后,我们需要重新生成新的lua静态lib库,然后我们的程序使用新的静态lib,这样才能起效
2.可以看到默认的路径的格式为: ?.lua,所以我们require “xxx”,而不是require “xxx.lua”

三.require的返回值

require “xxx” 某个模块后

1.如果该模块自身有返回值,且模块加载成功,那么require 的返回值就是该模块的返回值
2.如果模块没有返回值,如果require加载模块成功,就返回ture
3.require 内部将返回值储存在:package.loaded表中。
(即:package.loaded[xxx]中)

4.例子

(1)main.luax = require "test"function Call()    x.show()end(2)test.lualocal tb = {}function tb.show()    print("it is ok")endreturn tb(3)testLua.cppint _tmain(int argc,"Call");    lua_pcall(L,0);    return 0;}
四. require的实现代码
function require(name)    if not package.loaded[name] then        local loader = findloader(name)        if loader == nil then            error("unable to load module" .. name)        end        package.loaded[name] = true        local res = loader(name)        if res ~= nil then            package.loaded[name] = res        end    end    return package.loaded[name]end
@H_404_2@ 总结

以上是内存溢出为你收集整理的Lua的require使用全部内容,希望文章能够帮你解决Lua的require使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1243737.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存