首页 > 代码库 > Lua脚本和C++交互(二)

Lua脚本和C++交互(二)

上一节讲了一些基本的Lua应用,下面,我要强调一下,Lua的栈的一些概念,因为这个确实很重要,你会经常用到。熟练使用Lua,最重要的就是要时刻知道什么时候栈里面的数据是什么顺序,都是什么。如果你能熟练知道这些,实际你已经是Lua运用的高手了。当你初始化一个栈的时候,它的栈底是1,而栈顶相对位置是-1,说形象一些,你可以把栈想象成一个环,有一个指针标记当前位置,如果-1,就是当前栈顶,如果是-2就是当前栈顶前面一个参数的位置。以此类推。当然,你也可以正序去取,这里要注意,对于Lua的很多API,下标是从1开始的。这个和C++有些不同。而且,在栈的下标中,正数表示绝对栈底的下标,负数表示相对栈顶的相对地址,这个一定要有清晰的概念,否则很容易看晕了。(栈中数据的存储方式如下图)

注:其实都是从栈底到栈顶,索引数值递增

下面看一些具体的例子:

lua_pushnumber(m_pState, 11);lua_pushnumber(m_pState, 12);// lua_gettop()这个API是告诉你目前栈里元素的个数int nIn = lua_gettop(m_pState)int nData1 = lua_tonumber(m_pState, 1);     //读取栈底第一个绝对坐标中的元素int nData2 = lua_tonumber(m_pState, 2);     //读取栈底第二个绝对坐标中的元素int nData3 = lua_tonumber(m_pState, -1);     //读取栈顶第一个相对坐标中的元素int nData4 = lua_tonumber(m_pState, -2);     //读取栈顶第二个相对坐标中的元素printf("[Test]nData1  = %d, nData2  = %d./n, nData3  = %d, nData4  = %d./n");
[Test]nData1
= 11, nData2 = 12, nData3 = 12, nData4 = 11

上述代码的栈中存储如下图:

 

Lua脚本和C++交互(二)