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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值