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; // 表示有一个返回值在栈顶
}