您的位置:首页 > 编程语言 > Lua

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

2015-12-23 16:45 435 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: