1. 前言
在Lua中有个好用的数据型态叫作table,有点类似PHP中的Array
先来看个有table的Lua代码
[luaDemo.lua]
name = "LuaDemo"
monster = {
name = "Dinomon",
hp = 1000,
atk = 65
}
在上面的代码中,有一个名为monster的table
其中含有name、hp、atk 这些变量
如果要让C++取得table内的变量值,可不能用Lua学习笔记(2)中的取得Lua变量的方法
否则取得的值将是LuaDemo
本篇教程给出了一个取得table内变量值的实例
2.代码实现
老样子,因为内容比较简单,概念与前几篇类似,有了前面几篇教程做铺垫,我也不多说废话
直接给出实际的代码,附上详细的注释,相信在看完代码后就能了解程序运行的原理了
#include "include\lua.h"
#include "include\lauxlib.h"
#include "include\lualib.h"
#include "windows.h"
void main(int argc, char* argv[])
{
const char* strName;
lua_State *pLua = luaL_newstate(); // Lua5.2后的版本遗弃lua_open(),改用luaL_newstate()
if(!pLua)
{
printf("Failed to open Lua.\n");
return;
}
luaL_openlibs(pLua); // Lua5.1以上使用此函数开启库
if(luaL_dofile(pLua, "luaDemo.lua")!=0) // 执行Lua腳本,若返回0则成功
{
printf("Failed to run lua.\n");
return;
}
lua_settop(pLua, 0); // Lua堆栈栈顶索引重置为0
lua_getglobal(pLua, "monster"); // 指定C++欲取得之变量值所在的table变量名,此时table变量名字符串会推入堆栈栈顶
lua_pushstring(pLua, "name"); // 对于欲取得的table中的变量值,变量名以字符串推入堆栈栈顶
lua_gettable(pLua, -2); // 开始取得table中的变量值,此函数第二个参数为指定之table变量名在堆栈中的索引
// Lua会把前两个堆栈中元素取出寻找,然后把找到的值推入堆栈栈顶
if(lua_isstring(pLua, -1)!=0) // 判断堆栈中的值是否为我们要的字串型态的值,若返回非0则正確
{
strName = lua_tostring(pLua, -1); // 取出堆栈中的字串值
printf("%s\n", strName); // 印出结果
}
lua_close(pLua);
system("pause");
return;
}
3. Output
Dinomon