Lua 模块加载规则
时间:2021-08-08
本文章向大家介绍Lua 模块加载规则,主要包括Lua 模块加载规则使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
起因
同事写了行加载模块的代码,在 PC 上可以加载得到,在真机上却不行。于是我猜可能是因为查找路径有什么差异。
local Bitmap = require"Assets.Lua.game.modules.helper.common.Bitmap"
解决
因为打包时,会把 Lua 目录下的文件另外打包放在工程外,因此真机运行时,Lua 就是根目录(加载模块时,会搜索根目录是否有这个 lua 文件),并没有 Assets/Lua 这层目录关系,自然也就加载不到了。路径改成 .game.modules.helper.common.Bitmap
即可。
延展
Lua 通过 require 全局函数来加载模块。
require 加载过程
- 查找全局缓存表 package.loaded[modname] 。所有加载过的模块都会被保存在这个表里,避免重复加载。
- 通过 package.searchers 查找加载器并调用加载。除了 package.preload 不回返回值意外,其他加载器都会返回找到的模块的文件名。
- 在 package.preload[modname] 中查找加载器。
- 使用存储在 package.path 中的路径来查找 Lua 模块。这个路径是一个用分号分隔的模板构成的字符串。把模板中的问号替换成 modname,点替换为系统的目录分隔符。
- 使用存储在 package.cpath 中的路径来查找 C库 。
- 一体化加载器。从 C 路径中查找指定模块的根名字。
Lua热更原理以及加载规则
ulua 路径小记 以及 lua require 机制整理
Lua 运行时热重载
大体就是重新加载模块(package.loaded[modname] = nil
),替换旧模块的成员,数据保留,方法替换(替换前要通过 debug.setupvalue debug.getupvalue
将旧方法的 upvalue
取出复制到新方法中)。
【Lua运行时热重载②】重载Lua模块、替换函数
lua面试题:热更新简介、原理及示例
原文地址:https://www.cnblogs.com/nickcan/p/15115075.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【SpringBoot web-2】web项目参数传递
- 筛法求素数
- redis学习(十三)
- 【SpringBoot web-3】web项目统一数据封装与全局异常处理
- 送你 8 张图,好好理解一下。
- 【前端系列-1】ajax与Springboot通信将数据库数据渲染到前端表格
- 【前端系列-2】layui+springboot实现表格增删改查
- 容器技术|Docker三剑客之docker-swarm
- 【前端系列-3】layui表格使用自定义模板templet
- 【前端系列-4】layui表格集成select选择框和switch开关
- 使用docker Registry快速搭建私有镜像仓库(内附干货)
- 【前端系列-5】layui-from swtich使用小结
- Python解析变长结构体
- 如何优雅地在JS中使用枚举定义
- 【Java基础-1】 Java8新特性Stream详解