Lua中文语言编程源码-第十节,更改ltm.c 元格操作函数, 使Lua加载中文库关键词(执行诸如__索引,__新索引,__加等元表操作)

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

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

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

该库提供了许多函数,可以用来执行诸如__索引,__新索引,__加等Lua中的元表操作。

因技术问题,只保留中文版等的luaT_eventname[]数组列表。

原始的代码为:

复制代码
void luaT_init (lua_State *L) {
  static const char *const luaT_eventname[] = {  /* ORDER TM */
    "__index", "__newindex",
    "__gc", "__mode", "__len", "__eq",
    "__add", "__sub", "__mul", "__mod", "__pow",
    "__div", "__idiv",
    "__band", "__bor", "__bxor", "__shl", "__shr",
    "__unm", "__bnot", "__lt", "__le",
    "__concat", "__call", "__close"
  };
  int i;
  for (i=0; i<TM_N; i++) {
    G(L)->tmname[i] = luaS_new(L, luaT_eventname[i]);
    luaC_fix(L, obj2gco(G(L)->tmname[i]));  /* never collect these names */
  }
}

更改成以下代码:

复制代码
/* 初始化操作符和事件名称 */
void luaT_init (lua_State *L) {
  /* 定义操作符和事件名称的数组。注:该数组必须按照特定的顺序排列。包括了Lua中各种特殊方法的名称。 */
  static const char *const luaT_eventname[] = {  
   /* "__index", "__newindex",
    "__gc", "__mode", "__len", "__eq",
    "__add", "__sub", "__mul", "__mod", "__pow",
    "__div", "__idiv",
    "__band", "__bor", "__bxor", "__shl", "__shr",
    "__unm", "__bnot", "__lt", "__le",
    "__concat", "__call", "__close",   中文关键字 */
    "__索引","__新索引",                             
    "__垃圾回收", "__模式", "__长度", "__等于",
    "__加", "__减", "__乘", "__模", "__幂",
    "__除", "__整除",
    "__位与", "__位或", "__位异或", "__左移", "__右移",
    "__负", "__位非", "__小于", "__小于等于",
    "__连接", "__调用", "__关闭"
  };
  int i;

目前因技术原因,元表的操作只保留了中文 函数可以加载,如果你可以复制英文源代码,需要搜索"__"来查找并替换成中文的关键字,才可正常执行。

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

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

这个事情说三遍,

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

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

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

相关推荐
第二只羽毛9 分钟前
重载和继承的实践
java·开发语言
迎風吹頭髮28 分钟前
UNIX下C语言编程与实践35-UNIX 守护进程编写:后台执行、脱离终端、清除掩码与信号处理
java·c语言·unix
光军oi44 分钟前
全栈开发杂谈————JAVA微服务全套技术栈详解
java·开发语言·微服务
帮帮志44 分钟前
目录【系列文章目录】-(关于帮帮志,关于作者)
java·开发语言·python·链表·交互
qiuiuiu4131 小时前
正点原子RK3568学习日记-GIT
linux·c语言·开发语言·单片机
草莓熊Lotso1 小时前
《C++ STL list 完全指南:从基础操作到特性对比,解锁链表容器高效用法》
开发语言·c++·list
二王一个今2 小时前
Python打包成exe(windows)或者app(mac)
开发语言·python·macos
C嘎嘎嵌入式开发7 小时前
(2)100天python从入门到拿捏
开发语言·python
Stanford_11067 小时前
如何利用Python进行数据分析与可视化的具体操作指南
开发语言·c++·python·微信小程序·微信公众平台·twitter·微信开放平台
Vallelonga8 小时前
Rust 中的数组和数组切片引用
开发语言·rust