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

本文主要是介绍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里输出正确的中文显示

这篇关于Lua中文语言编程源码-第十节,更改ltm.c 元格操作函数, 使Lua加载中文库关键词(执行诸如__索引,__新索引,__加等元表操作)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/910195

相关文章

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.