其他栈操作
除了上述在 C 语言和栈之间交换数据的函数外,C API 还提供了下列用于通用栈操作的函数
复制代码
1
2
3
4
5
6
7
8
9int lua_gettop(lua_State *L); void lua_settop(lua_State *L, int index); void lua_pushvalue(lua_State *L, int index); void lua_rotate(lua_State *L, int index, int n); void lua_remove(lua_State *L, int index); void lua_insert(lua_State *L, int index); void lua_replace(lua_State *L, int index); void lua_copy(lua_State *L, int fromidx, int toidx);
函数 lua_gettop 返回栈中元素的个数,也即栈顶元素的索引。函数 lua_settop 将栈顶设置为一个指定的值,即修改栈中的元素数量。如果之前的栈顶比新设置的更高,那么高出来的这些元素将会被抛弃; 反之,该函数会向栈中压入 nil 来补充大小。特别的,函数 lua_settop(L, 0) 用于清空栈。
函数 lua_pushvalue 用于将指定索引上的元素的副本压入栈。函数 lua_rotate将指定索引的元素向栈顶转动n个位置。若n为正数,表示将元素向栈顶方向转动,而n为负数则表示向相反的方向转动。
函数 lua_replace 弹出一个值,并将栈顶设置为指定索引上的值,而不移动元素。函数 lua_copy 将一个索引上的值复制到另一个索引上,并且原值不受影响。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29#include <stdio.h> #include "lua.h" #include "lauxlib.h" static void stackDump(lua_State *L){ } int main(void) { lua_State *L = luaL_newstate(); lua_pushboolean(L, 1); lua_pushnumber(L, 10); lua_pushnil(L); lua_pushstring(L, "hello"); stackDump(L); lua_pushvalue(L, -4); stackDump(L); lua_replace(L, 3); stackDump(L); lua_settop(L, 6); stackDump(L); lua_rotate(L, 3, 1); stackDump(L); lua_remove(L, -3); stackDump(L); lua_settop(L, -5); stackDump(L); lua_close(L); return 0; }
最后
以上就是等待向日葵最近收集整理的关于Lua程序设计(八十二)其他栈操作的全部内容,更多相关Lua程序设计(八十二)其他栈操作内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复