二、堆棧的操作
因為Lua與C/C++是通過棧來通信,Lua提供了C API對棧進行操作。
我們先來看一個最簡單的例子:
#include#include using namespace std; extern "C" { #include "lua.h" #include "lauxlib.h" #include "lualib.h" } void main() { //1.創建一個state lua_State *L = luaL_newstate(); //2.入棧操作 lua_pushstring(L, "I am so cool~"); lua_pushnumber(L,20); //3.取值操作 if( lua_isstring(L,1)){ //判斷是否可以轉為string cout< 可以簡單理解為luaL_newstate返回一個指向堆棧的指針,其它看注釋應該能懂了吧。 其他一些棧操作:
int lua_gettop (lua_State *L); //返回棧頂索引(即棧長度) void lua_settop (lua_State *L, int idx); // void lua_pushvalue (lua_State *L, int idx);//將idx索引上的值的副本壓入棧頂 void lua_remove (lua_State *L, int idx); //移除idx索引上的值 void lua_insert (lua_State *L, int idx); //彈出棧頂元素,並插入索引idx位置 void lua_replace (lua_State *L, int idx); //彈出棧頂元素,並替換索引idx位置的值ua_settop將棧頂設置為一個指定的位置,即修改棧中元素的數量。如果值比原棧頂高,則高的部分nil補足,如果值比原棧低,則原棧高出的部分捨棄。所以可以用lua_settop(0)來清空棧。