lua require模块加载机制

原文地址http://www.daileinote.com/computer/lua/06

调用模块步骤

当我们调用require "modname"

1.会去检查package.loaded表格是否已经加载过,如果已经加载过直接返回,所以重复加载同一个模块多次只会加载1次

2.如果package.loaded表格没有此模块记录,则会到package.path指定的路径中搜索lua文件,如果找到则会调用loadfile加载,会返回一个函数(loader)。如果找不到lua文件,则会去package.cpath指定的路径中搜索动态库so文件,如果找到则会调用package.loadlib加载并寻找luaopen_modname函数(也就是loadfile的结果)。

3.不管是在lua文件中找到还是在动态库中找到,现在都已经有了一个loader加载器(函数)

4.此时,require调用加载器函数并传入2个参数(大多数模块会忽略参数),返回的任意值会存入package.loaded表格以便下次重复加载时直接返回。如果没返回值,也会当做有返回存入package.loaded(来避免下次重复加载时又白跑一遍2-4步骤)

如果想重复加载模块只需要执行

package.loaded[modname] = nil

那么下次再加载的时候,就会重复跑一遍2-4步骤

 

添加自定义搜索路径

-- 打印出当前默认搜索的动态库路径
-- ./?.so;/usr/lib64/lua/5.1/?.so;/usr/lib64/lua/5.1/loadall.so
print(package.cpath)

-- 添加默认搜索路径
package.cpath = '/home/lua;'..package.cpath

-- 打印出当前默认搜索的lua模块路径
-- ./?.lua;/usr/share/lua/5.1/?.lua;/usr/share/lua/5.1/?/init.lua;/usr/lib64/lua/5.1/?.lua;/usr/lib64/lua/5.1/?/init.lua
print(package.path)

-- 添加默认搜索路径
package.path = '/home/lua;'..package.path

 

总结

1.本文只是对模块加载机制做简单的介绍,如果有疑问可以给我留言
2.lua的版本为5.1,运行环境centos7 64位
3.原文地址http://www.daileinote.com/computer/lua/06

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值