L08. 模块与包
一. 什么是模块
1.模块类似于一个封装库, 从 Lua5.1开始,Lua 加入了标准的模块管理机制, 可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。
二. 加载模块
1. 使用require(模块名)加载模块
--方式1: require("模块名") --方式2: require"模块名" --方式3: local ret = require"模块名"
2. 加载机制
1. 对于自定义的模块,模块文件不是放在哪个文件目录都行,函数 require 有它自己的文件路径加载策略, 所有的'标准库'都是模块, lua提前自动加载的模块'所有标准库'--> math、string、...
2. 模块加载步骤
1). 当我们加载模块的时候首先先去package.loaded表中检查是否被加载过(package.loaded[module]是否有值) 如果有值的话直接返回, 所有重复加载同一个模块只会被加载1次, 如果有返回值, 则把第一次加载的返回值保存起来, 之后重复加载也是这个返回值
2). 如果package.loaded中没有此模块, 则会去全局变量package.path的指定路径中查找, 如果找到会调用loadfile加载此模块, loadfile加载完成后会返回一个函数, 则require函数内部会自动运行此函数, 如果有返回值则返回
3). 如果package.path中所有的路径没有找到此模块则会去path.cpath中所有的路径查找C包dll文件或so文件,如果找到则会调用package.loadlib加载此模块, , package.loadlib加载完成后会返回一个函数, 则require函数内部会自动运行此函数, 如果有返回值则返回
4) 如果没有找到则抛出错误信息
3. 环境变量
print(LUA_PATH) print(LUA_CPATH)
4. 修改查找(加载时搜索)的路径
--修改查找包文件路径 package.cpath = package.cpath .. ";.\\?.dll;.\\?.so" --修改查找lua模块文件路径 package.path = package.path .. ";.\\?.lua"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)