Lua中文语言编程源码-第三节,更改lualib.h Lua标准库, 使Lua支持中文关键词(与所有的基础库相关)

源码已经更新在CSDN的码库里:

复制代码
git clone https://gitcode.com/funsion/CLua.git

在src文件夹下的lualib.h,是Lua的标准库模块。

Lua标准库一共有有个10个库,base, 基本用不着改,所以没加中文名称。

|--------------------------------------------------|-----------------|-----------|------|----------------------------------|
| 函数声明 | 宏名 | 英文库名 | 中文库名 | 详解 |
| LUAMOD_API int luaopen_base(lua_State *L); | N/A (通常不需要宏) | base | | 提供Lua语言的核心功能,是所有Lua程序默认加载的部分。 |
| LUAMOD_API int luaopen_coroutine(lua_State *L); | LUA_COLIBNAME | coroutine | 协程 | 提供协程功能支持,允许非阻塞式并发执行流。 |
| LUAMOD_API int luaopen_table(lua_State *L); | LUA_TABLIBNAME | table | 表 | 提供表(table)数据结构的操作,包括创建、修改和查询等。 |
| LUAMOD_API int luaopen_io(lua_State *L); | LUA_IOLIBNAME | io | 端口 | 提供基本的输入输出功能,如文件读写操作等。 |
| LUAMOD_API int luaopen_os(lua_State *L); | LUA_OSLIBNAME | os | 系统 | 提供与操作系统交互的功能,如环境变量获取、时间处理、进程管理等。 |
| LUAMOD_API int luaopen_string(lua_State *L); | LUA_STRLIBNAME | string | 字 | 提供字符串的各种操作,如连接、查找、替换等。 |
| LUAMOD_API int luaopen_utf8(lua_State *L); | LUA_UTF8LIBNAME | utf8 | | 提供对UTF-8编码的支持,进行解码和编码等操作。 |
| LUAMOD_API int luaopen_math(lua_State *L); | LUA_MATHLIBNAME | math | 数 | 提供数学运算函数,如算术、三角函数、随机数生成等。 |
| LUAMOD_API int luaopen_debug(lua_State *L); | LUA_DBLIBNAME | debug | 调试 | 提供调试工具,如查看和修改堆栈、设置断点、跟踪调用过程等。 |
| LUAMOD_API int luaopen_package(lua_State *L); | LUA_LOADLIBNAME | package | 包 | 提供模块加载机制,支持通过require语句加载外部库或模块。 |

原始的代码为:
复制代码
LUAMOD_API int (luaopen_base) (lua_State *L);

#define LUA_COLIBNAME	"coroutine"
LUAMOD_API int (luaopen_coroutine) (lua_State *L);

#define LUA_TABLIBNAME	"table"
LUAMOD_API int (luaopen_table) (lua_State *L);

#define LUA_IOLIBNAME	"io"
LUAMOD_API int (luaopen_io) (lua_State *L);

#define LUA_OSLIBNAME	"os"
LUAMOD_API int (luaopen_os) (lua_State *L);

#define LUA_STRLIBNAME	"string"
LUAMOD_API int (luaopen_string) (lua_State *L);

#define LUA_UTF8LIBNAME	"utf8"
LUAMOD_API int (luaopen_utf8) (lua_State *L);

#define LUA_MATHLIBNAME	"math"
LUAMOD_API int (luaopen_math) (lua_State *L);

#define LUA_DBLIBNAME	"debug"
LUAMOD_API int (luaopen_debug) (lua_State *L);

#define LUA_LOADLIBNAME	"package"
LUAMOD_API int (luaopen_package) (lua_State *L);
更改成以下代码:
复制代码
/* 基础库 */
LUAMOD_API int (luaopen_base) (lua_State *L);
/* 协程库 */
#define LUA_COLIBNAME	"coroutine"
#define LUA_COLIBNAME_C     "协程"
LUAMOD_API int (luaopen_coroutine) (lua_State *L);
/* 表库 */
#define LUA_TABLIBNAME	"table"
#define LUA_TABLIBNAME_C    "表"
LUAMOD_API int (luaopen_table) (lua_State *L);
/* I/O库 */
#define LUA_IOLIBNAME	"io"
#define LUA_IOLIBNAME_C     "端口"
LUAMOD_API int (luaopen_io) (lua_State *L);
/* 操作系统库 */
#define LUA_OSLIBNAME	"os"
#define LUA_OSLIBNAME_C     "系统"
LUAMOD_API int (luaopen_os) (lua_State *L);
/* 字符串库 */
#define LUA_STRLIBNAME	"string"
#define LUA_STRLIBNAME_C    "字"
LUAMOD_API int (luaopen_string) (lua_State *L);
/* UTF-8库 */
#define LUA_UTF8LIBNAME	"utf8"
LUAMOD_API int (luaopen_utf8) (lua_State *L);
/* 数学库 */
#define LUA_MATHLIBNAME	"math"
#define LUA_MATHLIBNAME_C	"数"
LUAMOD_API int (luaopen_math) (lua_State *L);
/* 调试库 */
#define LUA_DBLIBNAME	"debug" 
#define LUA_DBLIBNAME_C	"调试"
LUAMOD_API int (luaopen_debug) (lua_State *L);
/* 包装库 */
#define LUA_LOADLIBNAME	"package"
#define LUA_LOADLIBNAME_C	"包"
LUAMOD_API int (luaopen_package) (lua_State *L);

为了保证中英文库名都可以使用,以便你可以复制英文原码来进行更改。所以保留了英文的库名列表,这样就只能使用两个库列表,

#define LUA_COLIBNAME "coroutine", 定义,协程英文库宏,英文库名

#define LUA_COLIBNAME_C "协程" 定义,协程中文库宏,英文库名

其实它们都是加载同样的库名,算是加载了2次,以Lua内部算法,应该只会加载一次。

LUAMOD_API int (luaopen_coroutine) (lua_State *L);函数是Lua标准库中用于打开并注册协程库到指定Lua状态机的入口函数。通过调用此函数,可以使得Lua程序拥有创建和管理协程的能力,实现非阻塞式的并发执行逻辑。

更改完之后,同样需要重新编译Lua的源码,实现以上列出的关键词的中文化。

注意,在Window系统下编译Lua, 最好将所有Lua的源码,重新保存成ANSI格式的文件,刚下载的默认的源码会是UTF-8格式的。

这个事情说三遍,

1,不然就会出现,Window下的UTF-8源码可编译,但Shell里的中文输出会乱码。

2,要不然就是Window的ANSI源码不可编译(假如你没做以上步骤),

3,如果是用ANSI格式的源码编译的Lua.exe,对应的,你在Window下写的Lua程序也是需要保存成ANSI格式的。这样就可以在Shell里输出正确的中文显示。

因为只是改库名,这里就先不用例程演示了。请看接下来的文章,改完协程再上例程。
相关推荐
格林威5 分钟前
工业相机 SDK 在 Docker 容器中的部署与权限配置(含 USB/GigE)
开发语言·人工智能·数码相机·计算机视觉·docker·容器·工业相机
哎嗨人生公众号8 分钟前
手写求导公式,让轨迹优化性能飞升,150ms变成9ms
开发语言·c++·算法·机器人·自动驾驶
code_whiter14 分钟前
C++6(模板)
开发语言·c++
一只旭宝22 分钟前
【C++ 入门精讲1】初始化、const、引用、内联函数 | 超详细手写笔记(附完整代码)
开发语言·c++
XiYang-DING31 分钟前
【Java】二叉搜索树(BST)
java·开发语言·python
Lyyaoo.31 分钟前
【JAVA基础面经】进程安全问题(synchronized and volatile)
java·开发语言·jvm
Andya_net42 分钟前
Java | 基于 Feign 流式传输操作SFTP文件传输
java·开发语言·spring boot
无限进步_1 小时前
【C++】多重继承中的虚表布局分析:D类对象为何有两个虚表?
开发语言·c++·ide·windows·git·算法·visual studio
清水白石0081 小时前
向后兼容的工程伦理:Python 开发中“优雅重构”与“责任担当”的平衡之道
开发语言·python·重构
A.A呐1 小时前
【QT第六章】界面优化
开发语言·qt