Lua中文语言编程源码-第九节,更改ltablib.c 表格操作函数, 使Lua加载中文库关键词(执行诸如查找、插入、删除、排序等表格操作)

文章讲述了C语言编写的Lua库中,增加了中文版的表格操作函数,如连接、插入等,同时保持英文版本。为了确保中英文函数可用,虽然加载了两次库,但因为Lua的内部机制,实际只加载一次。开发者需要注意源码的编码格式问题以避免编译和运行时的中文显示问题。
摘要由CSDN通过智能技术生成

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

git clone https://gitcode.com/funsion/CLua.git

在src文件夹下的ltablib.c  表格操作函数,此模块是C语言编写的,是Lua语言中的一个库文件,主要用来提供表格操作的功能。

 该库提供了许多函数,可以用来创建、操作和管理Lua中的表格。

 这些函数可以用于在Lua中执行诸如查找、插入、删除、排序等表格操作。

 该库还提供了将表格转换为字符串和将字符串转换为表格的函数。

增加中文版 【连接】等 的tab_funcs列表,保留英文版【concat 】等 的tab_funcs列表。

原始的代码为:

static const luaL_Reg tab_funcs[] = {
  {"concat", tconcat},
  {"insert", tinsert},
  {"pack", tpack},
  {"unpack", tunpack},
  {"remove", tremove},
  {"move", tmove},
  {"sort", sort},
  {NULL, NULL}
};
 更改成以下代码:
/*
 * 定义用于注册到Lua的表函数的数组。
 * 每个元素都是一个结构体,包含函数名和对应的C函数指针。
 * 功能包括:连接字符串、插入元素、打包、解包、移除元素、移动元素、排序。
 */
static const luaL_Reg tab_funcs[] = {
  {"concat", tconcat}, // 字符串连接
  {"连接", tconcat}, // 中文名称的字符串连接
  {"insert", tinsert}, // 在表中插入元素
  {"插入", tinsert}, // 中文名称的插入函数
  {"pack", tpack}, // 打包表为一个数组
  {"打包", tpack}, // 中文名称的打包函数
  {"unpack", tunpack}, // 解包数组为表
  {"解包", tunpack}, // 中文名称的解包函数
  {"remove", tremove}, // 从表中移除元素
  {"移除", tremove}, // 中文名称的移除函数
  {"move", tmove}, // 移动表中的元素
  {"移动", tmove}, // 中文名称的移动函数
  {"sort", sort}, // 对表进行排序
  {"排序", sort}, // 中文名称的排序函数  
  {NULL, NULL} // 结束标志
};

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

{"concat", tconcat}, // 字符串连接

{"连接", tconcat}, // 中文名称的字符串连接,与concat相同,但是使用中文名称

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

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

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

这个事情说三遍,

1,不然就会出现,Window下的UTF-8源码可编译,但Shell里的中文输出会乱码。
2,要不然就是Window的ANSI源码不可编译(假如你没做以上步骤),
3,如果是用ANSI格式的源码编译的Lua.exe,对应的,你在Window下写的Lua程序也是需要保存成ANSI格式的。这样就可以在Shell里输出正确的中文显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值