Lua学习笔记(5) : 取得table內变量

来源:互联网 发布:java 流程引擎 编辑:程序博客网 时间:2024/06/02 05:34

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堆栈栈顶索引重置为0lua_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



0 0
原创粉丝点击