Lua 5.2+变量声明用省略号的疑问及pollnet库代码解析
pollnet.lua 代码解析
1. local _, own_path = ... 为啥这么写,还要求Lua 5.2+
当Lua文件通过require加载时,Lua 5.2及以后版本会给这个文件传递两个参数:第一个是模块名,第二个是该模块文件的绝对路径。
...就是require传过来的可变参数集合,这里用_, own_path = ...是跳过第一个没用的模块名,只提取第二个参数(文件路径)。- Lua 5.1及更早版本没有这个机制,
require不会给模块传这些参数,所以代码注释才明确要求至少Lua 5.2。
2. local LIBDIR = own_path:match("(.*"..package.config:sub(1,1)..")") 做什么
这段代码是提取模块所在的目录路径:
package.config:sub(1,1):Lua的package.config字符串第一个字符是当前系统的目录分隔符(Windows是\,Linux/macOS是/),这样写能兼容不同系统的路径格式。- 后面的匹配规则会抓取
own_path里最后一个目录分隔符之前的所有内容,说白了就是把文件路径里的pollnet.lua文件名去掉,只留下它所在的文件夹路径。 - 举个例子:如果
own_path是D:\dev\pollnet.lua,匹配后LIBDIR就是D:\dev\;如果是/home/user/lib/pollnet.lua,结果就是/home/user/lib/。
3. 你的推测完全正确
这段代码就是用来获取pollnet.lua的所在目录,后续应该会用这个路径加载同目录下的pollnet.dll或者其他平台的动态链接库文件。
内容的提问来源于stack exchange,提问作者SamelCamel
相关产品推荐
相关产品推荐

