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_COLIBNAMEcoroutine协程提供协程功能支持,允许非阻塞式并发执行流。
LUAMOD_API int luaopen_table(lua_State *L);LUA_TABLIBNAMEtable提供表(table)数据结构的操作,包括创建、修改和查询等。
LUAMOD_API int luaopen_io(lua_State *L);LUA_IOLIBNAMEio端口提供基本的输入输出功能,如文件读写操作等。
LUAMOD_API int luaopen_os(lua_State *L);LUA_OSLIBNAMEos系统提供与操作系统交互的功能,如环境变量获取、时间处理、进程管理等。
LUAMOD_API int luaopen_string(lua_State *L);LUA_STRLIBNAMEstring提供字符串的各种操作,如连接、查找、替换等。
LUAMOD_API int luaopen_utf8(lua_State *L);LUA_UTF8LIBNAMEutf8提供对UTF-8编码的支持,进行解码和编码等操作。
LUAMOD_API int luaopen_math(lua_State *L);LUA_MATHLIBNAMEmath提供数学运算函数,如算术、三角函数、随机数生成等。
LUAMOD_API int luaopen_debug(lua_State *L);LUA_DBLIBNAMEdebug调试提供调试工具,如查看和修改堆栈、设置断点、跟踪调用过程等。
LUAMOD_API int luaopen_package(lua_State *L);LUA_LOADLIBNAMEpackage提供模块加载机制,支持通过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里输出正确的中文显示。

因为只是改库名,这里就先不用例程演示了。请看接下来的文章,改完协程再上例程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/750402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51单片机-AT24C02(I2C总线)

目录 一,介绍及元件工作原理 7.时序结构(重要) 8.i2C总线数据帧(重要) 二,应用 一,介绍及元件工作原理 1.元件介绍 2.存储器 3.地址总线和数据总线 地址总线只能一次选中一行 4.引脚及应用…

一起学数据分析_2

写在前面:代码运行环境为jupyter,如果结果显示不出来的地方就加一个print()函数。 一、数据基本处理 缺失值处理: import numpy as np import pandas as pd#加载数据train.csv df pd.read_csv(train_chinese.csv) df.head()# 查看数据基本…

05.BOM对象

一、js组成 JavaScript的组成 ECMAScript: 规定了js基础语法核心知识。比如:变量、分支语句、循环语句、对象等等 Web APIs : DOM 文档对象模型, 定义了一套操作HTML文档的APIBOM 浏览器对象模型,定义了一套操作浏览器窗口的API 二、windo…

wsl ubuntu 安装cuda nvcc环境

wsl ubuntu 安装cuda环境: CUDA Toolkit 11.6 Downloads | NVIDIA DeveloperDownload CUDA Toolkit 11.6 for Linux and Windows operating systems.https://developer.nvidia.com/cuda-11-6-0-download-archive?target_osLinux&target_archx86_64&Distri…

二进制安全找实习记录

就安全岗而言,这里笔者仅仅面试了腾讯的科恩实验室内核安全和浏览器安全(其它的就面了一下前后端开发,这就不说了,笔者也没打算搞开发),然后倒在了一面。然后有的问题忘记了,仅仅记录一下自己回…

Word粘贴时出现“运行时错误53,文件未找到:MathPage.WLL“的解决方案

在安装完MathType后,打开word复制粘贴时报错“运行时错误53,文件未找到:MathPage.WLL” 首先确定自己电脑的位数(这里默认32位) 右击MathType桌面图标,点击“打开文件所在位置”, 然后分别找到MathPage.W…

【原理图与PCB专题】使用Cadence如何在Layout时直接互换相同功能的PIN

在实际的项目中,比如有一些排阻、FPGA、ESD二极管引脚其实是可以互换的,但是如果没有使用PinGroup属性功能,对于大公司原理图设计与PCB Layout分开的情况,我们可能需要按以下步骤: 这个步骤中存在通知和等待过程,如果存在多次(如多个器件,或是修改后调整又觉得不合适)…

LeetCode 面试经典150题 121.买卖股票的最佳时机

题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易…

python 直方图

python可以调用hist方法绘制直方图。 import matplotlib.pyplot as plt import numpy as np; plt.rcParams["font.family"]["SimHei"] # 确保图中中文字体正确显示 x[0.1,0.2,0.3,0.4,0.5,0.6,0.1,0.2,0.2,0.2] plt.xlabel(满意程度) plt.ylabel(频数) …

npm下载慢换国内镜像地址

1 设置淘宝镜像地址 npm config set registry http://registry.npm.taobao.org 2 查看当前下载地址 npm config get registry 3 其它镜像地址列表: 1. 官方镜像:https://registry.npmjs.org/ 2. 淘宝镜像:https://registry.npm.taobao.o…

机器学习模型—XGBoost

机器学习模型—XGBoost XGBoost(Extreme Gradient Boosting)是由陈天奇等人于2014年提出的一个高效可扩展的梯度提升库。它在梯度提升框架的基础上进行了优化和改进,被广泛应用于机器学习竞赛和实际应用中 作为GBDT(Gradient Boosting Decision Tree)的扩展版本,XGBoost在算…

门牌制作-蓝桥杯?-Lua 中文代码解题第3题

门牌制作-蓝桥杯?-Lua 中文代码解题第3题 小蓝要为一条街的住户制作门牌号。 这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。 小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 …

3D Occupancy 预测冠军方案:FB-OCC

文章结尾有视频和连接 背景知识 Occupancy 更像是一个语义分割任务,但是它是 3D 空间的语义分割它的我们对 Occupancy 分自己的期望是它能够具有通用的这种目标建模的能力,才能够不是不受制于这种目标框这种几何的矩形的这种约束而能够建模任意形状的这…

springboot蛋糕订购小程序的设计与实现

摘 要 相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低商家的运营人员成本,实现了蛋糕订购的标准化、制度化、程序化的管理,有效地防止了蛋糕订购的随意管理,提高了信息的处理速度和精确度,能够及时、准确…

废狗的Python连接MySQL之旅

我想本地用python连接mysql中的表,但是我不会。。。。 MySQL 安装mysql MySQL下载与安装-CSDN博客 安装可视化界面navicat 链接:https://pan.baidu.com/s/1esCF7W1Xwh1kIiw0OmKtjg 提取码:f4s0 开启mysql服务 net start mysql //开启 …

Nginx高级技术: 代理缓存配置

一、缓存说明 Nginx缓存,Nginx 提供了一个强大的反向代理和 HTTP 服务器功能,同时也是一个高效的缓存服务器。一般情况下系统用到的缓存有以下三种: 1、服务端缓存:缓存存在后端服务器,如 redis。 2、代理缓存&#…

【Leetcode】top 100 矩阵

73 矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 方法一:拷贝出一个同样大小的矩阵,根据拷贝矩阵在原矩阵上修改元素; 空间复杂度O(mn) 方法二&…

数据分析-Pandas的直接用Matplotlib绘图

数据分析-Pandas的直接用Matplotlib绘图 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表…

【LeetCode热题100】23. 合并 K 个升序链表(链表)

一.题目要求 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 二.题目难度 困难 三.输入样例 示例 1: 输入:lists [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,…

在react中使用tailwindcss

安装tailwind css npm i -D tailwindcssnpm:tailwindcss/postcss7-compat postcss^7 autoprefixer^9安装 CRACO 由于 Create React App 不能让您覆盖原生的 PostCSS 配置,所以我们还需要安装 CRACO 才能配置 Tailwind。 npm install craco/craco配置CRACO 在项目根…