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;  // 表示有一个返回值在栈顶
}
相关推荐
lohiecan3 小时前
国产自研开源新语言|梦丘 MOS-LANG 重磅登场!深耕 AI 编程与嵌入式生态
人工智能·junit
努力努力再努力wz3 小时前
【MySQL进阶系列】一文打通事务机制:从锁、Undo Log 到 MVCC 与隔离级别
c语言·数据结构·数据库·c++·mysql·算法·github
薇茗3 小时前
【初阶数据结构】 左右逢源的分支诗律 二叉树1
c语言·数据结构·算法
xingpanvip4 小时前
星盘接口开发文档:组合三限盘接口指南
android·开发语言·前端·python·php·lua
eDEs OLDE4 小时前
CC++链接数据库(MySQL)超级详细指南
c语言·数据库·c++
广州山泉婚姻4 小时前
C语言三种基本程序结构详解
c语言·开发语言
上弦月-编程5 小时前
【C语言】函数栈帧的创建与销毁(底层原理)
c语言·开发语言
Hhy_11075 小时前
【从零开始学习数据结构 ④】:栈 ——后进先出的艺术
c语言·数据结构·学习·visual studio
爱编码的小八嘎5 小时前
c语言完美演绎9-17
c语言
广州山泉婚姻5 小时前
C++ STL Vector 入门与实战全攻略
c语言·c++