Lua 5.4 是 Lua 语言的一个版本,它提供了许多 C API 函数,这些函数允许开发者在 C 语言中嵌入和扩展 Lua 的功能。以下是一些常用的 Lua 5.4 C API 函数,以及它们的简单示例:
-
lua_newstate - 创建一个新的 Lua 状态。
clua_State *L = lua_newstate(0, 0); // 创建一个新的 Lua 状态
-
lua_close - 关闭一个 Lua 状态。
clua_close(L); // 关闭 Lua 状态
-
lua_openlibs - 打开 Lua 的标准库。
clua_openlibs(L); // 打开所有标准库
-
lua_getglobal - 获取全局变量。
clua_getglobal(L, "myGlobal"); // 获取名为 'myGlobal' 的全局变量
-
lua_setglobal - 设置全局变量。
clua_pushnumber(L, 42); // 将数字 42 推入栈 lua_setglobal(L, "myGlobal"); // 将栈顶的值设置为全局变量 'myGlobal'
-
lua_pcall - 调用一个函数。
cint status = lua_pcall(L, 0, LUA_MULTRET, 0); // 调用栈顶的函数 if (status != LUA_OK) { // 处理错误 }
-
lua_pushnumber - 将一个数字推入栈。
clua_pushnumber(L, 123); // 将数字 123 推入栈
-
lua_pushstring - 将一个字符串推入栈。
cconst char *str = "Hello, Lua!"; lua_pushstring(L, str); // 将字符串 "Hello, Lua!" 推入栈
-
lua_pushboolean - 将一个布尔值推入栈。
clua_pushboolean(L, 1); // 将真值推入栈
-
lua_pushnil - 将 nil 推入栈。
clua_pushnil(L); // 将 nil 推入栈
-
lua_pop - 从栈中弹出元素。
clua_pop(L, 1); // 从栈中弹出一个元素
-
lua_newtable - 创建一个新的空表。
clua_newtable(L); // 创建一个新的空表
-
lua_settable - 将一个值设置到表中。
clua_newtable(L); lua_pushstring(L, "key"); // 推入键 lua_pushnumber(L, 123); // 推入值 lua_settable(L, -3); // 将值设置到表中,表在栈的 -3 位置
效果:t[k]=v;
其中v是栈顶(-1)的值,k值栈顶下(-2)的键,即将这个键值对设置到表t(-3)中;
操作后-1、-2从栈中弹出,-3变成-1.
-
lua_gettop - 获取栈顶的索引。
cint top = lua_gettop(L); // 获取栈顶索引
-
lua_settop - 设置栈的顶部。
clua_settop(L, 0); // 将栈顶设置为 0
-
lua_load - 加载一个 Lua 脚本。
cint status = lua_load(L, my_reader, data, "script.lua"); if (status != LUA_OK) { // 处理错误 }
-
lua_register - 注册 C 函数到 Lua 中。
clua_register(L, "myCFunction", myCFunction); // 注册 C 函数
-
lua_gettable - 获取表中指定键的值,放到栈顶(-1)。
clua_pushnumber(L, 1); lua_gettable(L, -2);
把一个键压入栈顶,然后获取-2处的表,将表中键为1的值再次压入栈顶。