在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
向栈中压入数据: lua_pushnil(lua_State*); lua_pushboolean(lua_State*, bool); lua_pushnumber(lua_State*, lua_Number); lua_pushinteger(lua_State*, lua_Integer) lua_pushlstring(lua_State*, const char*, size_t); lua_pushstring(lua_State*, const char*); 获取栈中元素的类型 lua_type(lua_State* L, int index); 类型包括 LUA_TNIL, LUA_TBOOLEAN, LUA_TNUMBER, LUA_TSTRING, LUA_TTABLE, LUA_TFUNCTION, LUA_TUSERDATA 验证栈中的元素类型; lua_is*(lua_State* L, int index) 其实有了lua_type()完全可以自己写类型验证的 每必要使用lua提供的API 比如可以定义 bool lua_is_number (lua_State* L, int index) { return lua_type(L, index) == LUA_TNUMBER ? true : false; } 所以完全是可以利用lua_type来自行定义对栈中元素的验证的。 获取栈中元素的类型的字符串表示: lua_typename(lua_State*, int )这里的int值是通过lua_type()获取到的值 其实这些都可以通过lua_type(lua_State*)来进行实现 const char* lua_type_str(int lua_type) { static char type[LUA_TYPE_LEN_MAX]; switch (lua_type) { case LUA_TNIL: strcpy(type, "nil"); break; case LUA_TBOOLEAN: strcpy(type, "boolean"); break; case LUA_TNUMBER: strcpy(type, "number"); break; case LUA_TSTRING: strcpy(type, "string"); break; case LUA_TTABLE: strcpy(type, "table"); break; case LUA_TTHREAD: strcpy(type, "thread"); break; case LUA_TFUNCTION: strcpy(type, "function"); break; case LUA_TUSERDATA: strcpy(type, "userdata"); break; default: strcpy(type, "unknown"); break; } return type; } 这样就可以实现你自己的栈元素类型的字符串显示了 获取指定位置的元素可以使用lua_to*(lua_State*, int ) int lua_toboolean(lua_State*, int); lua_Number lua_tonumber(lua_State*, int); lua_Integer lua_tointeger(lua_State*, int ); const char* lua_tolstring(lua_State*, int, size_t length); lua_gettop(lua_State*) 得到栈中元素的个数 lua_settop(lua_State*, int index) 设置栈中元素的个数,如果设置的值比当前栈中元素的个数多,则将多出的那部分全部丢弃,如果设置的值比当前栈中元素个数多,则将新加的值全部设置为nil. lua_pushvalue(lua_State*, int index) 将index位置的值的副本压入栈顶 lua_remove(lua_State* L, int index)将指定位置的元素删除,并且其上的所有元素下移 lua_insert(lua_State*, int index) 将指定位置之上的元素上移,空出该位置,并将栈顶元素移到此处 lua_replace(lua_State*, int index)将栈顶元素弹出,并将其设置到指定的索引上。
lua_pop是以一个宏的形式进行定义的 #define lua_pop(L, n) lua_settop(L, -(n) - 1); 比如弹出栈顶的元素则可以使用 lua_pop(L, 1)
|
请发表评论