Lua C API 中一段LUA建表过程解释

原文地址:Lua C API 中一段LUA建表过程解释

欢迎参观我的网站:无敌牛 -- 技术/著作/典籍/分享等

复制代码
static int
lua_load_text(lua_State *L)
{
    // 此时 Lua 栈是空的或者包含调用此函数所需的参数
    // 我们用 | 表示栈的边界,从左到右表示从栈底到栈顶
    
    lua_newtable(L);
    // 在 Lua 虚拟机中创建一个新表
    // 将这个表的引用压入栈中
    // 栈状态: | table |
    //         ↑
    //       栈顶(-1)
    
    lua_pushstring(L, "cookie");
    // 将字符串 "cookie" 压入栈中
    // 栈状态: | table | "cookie" |
    //         -2      -1
    //                ↑
    //              栈顶
    
    lua_pushnumber(L, rspamd_lua_text_cookie);
    // 将数字 0x2b21ef6f 压入栈中
    // 栈状态: | table | "cookie" | 0x2b21ef6f |
    //         -3      -2        -1
    //                          ↑
    //                        栈顶
    
    lua_settable(L, -3);
    // 执行以下操作:
    // 1. 从栈顶取出两个元素:"cookie"(键) 和 0x2b21ef6f(值)
    // 2. 获取索引 -3 处的元素(即 table)
    // 3. 在该表中设置键值对:table["cookie"] = 0x2b21ef6f
    // 4. 弹出已使用的两个元素
    // 栈状态: | table |    其中 table["cookie"] = 0x2b21ef6f
    //         -1
    //        ↑
    //      栈顶
    
    luaL_register(L, NULL, textlib_f);
    // 将 textlib_f 数组中定义的函数注册到表中
    // 栈状态: | table |  表中现在包含函数和 cookie 键
    //         -1
    //        ↑
    //      栈顶
    
    return 1;  // 表示有一个返回值在栈顶
}
相关推荐
无相求码13 分钟前
C程序的内存到底怎么分的?栈、堆、全局区一张图讲清楚
c语言
天空'之城1 小时前
C 语言工业级通用组件手写 08:精准软件消抖
c语言·嵌入式开发·工业级组件·软件消抖·按键防抖
Legendary_0082 小时前
LDR6500 设计指南:Type-C 音频快充二合一配件 PD 取电与插拔时序控制方案
c语言·开发语言·音视频
会飞的小新3 小时前
C 标准库之 <fenv.h> 详解与深度解析
c语言·开发语言·microsoft
爱刷碗的苏泓舒4 小时前
C 语言 if-else 与 switch-case 分支语句对比
c语言·开发语言
无相求码5 小时前
指针的5层境界,从入门到劝退:C语言指针进阶全解析
c语言
C++ 老炮儿的技术栈5 小时前
基于MFC+原生GDI手动自绘仪表盘控件
c语言·c++·visual studio·控件·工业控制·gdi·自绘
小肝一下6 小时前
3. 单链表
c语言·数据结构·c++·算法·leetcode·链表·dijkstra
炸膛坦客15 小时前
单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集
c语言·c++·单片机
程序员Rock1 天前
上位机开发-MODBUS面试常见问题
c语言·c++·面试·职场和发展·上位机