• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Lua require 相对路径

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
1 require("lala");

 

 这样运行会得到一个报错:
 
 1 1>F:\Git\luatest\metaTest.lua:(56): module 'lala' not found:
 2     no field package.preload['lala']
 3     no file '.\lala.lua'
 4     no file 'D:\Program Files (x86)\LuaStudio\lua\lala.lua'
 5     no file 'D:\Program Files (x86)\LuaStudio\lua\lala\init.lua'
 6     no file 'D:\Program Files (x86)\LuaStudio\lala.lua'
 7     no file 'D:\Program Files (x86)\LuaStudio\lala\init.lua'
 8     no file 'C:\Program Files\Lua\5.1\lua\lala.luac'
 9     no file 'F:\Git\luatest\lala.lua'
10     no file '.\lala.dll'
11     no file 'D:\Program Files (x86)\LuaStudio\lala.dll'
12     no file 'D:\Program Files (x86)\LuaStudio\loadall.dll'
13 Stack Traceback:
14     [C]: in function 'require'
15     F:\Git\luatest\metaTest.lua:56: in main chunk

 

这里可以很清晰的看见lua require方法搜索一个模块或者文件的流程会依次搜索文件名为lala.lua的文件或者dll
 
那么这些带有路径的lala.lua文件怎么来的的?很简单lua的模块路径是存在一个全局table package的path和cpath字段里的:
打印一下

1 print(package.path);

 

运行得到
1 ;.\?.lua;
2 D:\Program Files (x86)\LuaStudio\lua\?.lua;
3 D:\Program Files (x86)\LuaStudio\lua\?\init.lua
4 ;D:\Program Files (x86)\LuaStudio\?.lua;
5 D:\Program Files (x86)\LuaStudio\?\init.lua;
6 C:\Program Files\Lua\5.1\lua\?.luac;
7 F:\Git\luatest\?.lua

 

1 print(package.cpath);
.\?.dll;
D:\Program Files (x86)\LuaStudio\?.dll;
D:\Program Files (x86)\LuaStudio\loadall.dll

 

是不是很眼熟,是的当require的时候lua解释器会按照path 和cpath里存储的路径替换“?”去查询是否存在该文件,有则加载脚本或者模块亦或是C库。
 
了解了加载机制我们就可以很方便的去加载任何我们当前脚本依赖的外部模块:
'require("requiretest.loader");'
但是又一个问题,当我们想要加载当前脚本的上级目录或者其他目录的怎么办,这时候就需要自己去修改或者是添加相对路径,由于require的查询路径都是
存储在package.path中的这样我们就可以自行添加:
1 package.path = package.path ..';..\\?.lua';

 

 
测试下:在目录requiretest目录下新建loader.lua,在根目录下新建requiretest2目录并新建loader2.lua:
loader.lua:
1 require("requiretest2.loader2");

 

loader2.lua:
1 print("requiretest2.loader2");

 

 
运行:
1 requiretest2.loader2

在项目实际运用时可以根据需求加入相对目录。

 

 

些许浅薄认识 如有不妥之处望请斧正!!!!!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua复制table发布时间:2022-07-22
下一篇:
Lua表达式发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap