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


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

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


    在src文件夹下的ltm.c  表格操作函数,此模块是C语言编写的,是Lua语言中的一个库文件,主要用来提供元表操作的功能。
     该库提供了许多函数,可以用来执行诸如__索引,__新索引,__加等Lua中的元表操作。

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

    原始的代码为:

    1. void luaT_init (lua_State *L) {
    2. static const char *const luaT_eventname[] = { /* ORDER TM */
    3. "__index", "__newindex",
    4. "__gc", "__mode", "__len", "__eq",
    5. "__add", "__sub", "__mul", "__mod", "__pow",
    6. "__div", "__idiv",
    7. "__band", "__bor", "__bxor", "__shl", "__shr",
    8. "__unm", "__bnot", "__lt", "__le",
    9. "__concat", "__call", "__close"
    10. };
    11. int i;
    12. for (i=0; i<TM_N; i++) {
    13. G(L)->tmname[i] = luaS_new(L, luaT_eventname[i]);
    14. luaC_fix(L, obj2gco(G(L)->tmname[i])); /* never collect these names */
    15. }
    16. }

    更改成以下代码:

    1. /* 初始化操作符和事件名称 */
    2. void luaT_init (lua_State *L) {
    3. /* 定义操作符和事件名称的数组。注:该数组必须按照特定的顺序排列。包括了Lua中各种特殊方法的名称。 */
    4. static const char *const luaT_eventname[] = {
    5. /* "__index", "__newindex",
    6. "__gc", "__mode", "__len", "__eq",
    7. "__add", "__sub", "__mul", "__mod", "__pow",
    8. "__div", "__idiv",
    9. "__band", "__bor", "__bxor", "__shl", "__shr",
    10. "__unm", "__bnot", "__lt", "__le",
    11. "__concat", "__call", "__close", 中文关键字 */
    12. "__索引","__新索引",
    13. "__垃圾回收", "__模式", "__长度", "__等于",
    14. "__加", "__减", "__乘", "__模", "__幂",
    15. "__除", "__整除",
    16. "__位与", "__位或", "__位异或", "__左移", "__右移",
    17. "__负", "__位非", "__小于", "__小于等于",
    18. "__连接", "__调用", "__关闭"
    19. };
    20. 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里输出正确的中文显示

  • 相关阅读:
    如何做好测试?(四)集成测试(Integration Testing, IT)
    已备案域名用国外服务器会不会掉备案?
    SQL Server中的NULL值处理:判断与解决方案
    STM32常见符号解释定义(持续更新)
    11 结构型模式- 代理模式
    C语言memcpy +memmove实现
    Docker从0到1的开始【入门篇】
    【Spring Boot 源码学习】HttpEncodingAutoConfiguration 详解
    【Y 新闻】YMatrix 成立三周年,三岁的我们还真是“不简单”
    自定义view实战(9):多点触控扇形图
  • 原文地址:https://blog.csdn.net/funsion/article/details/137841867