#Lua# Stack Manipulation

欢迎前往个人博客 驽马点滴 和视频空间 哔哩哔哩-《挨踢日志》

Lua C API提供了操纵The Stack的函数:

获取The Stack元素个数:

int lua_gettop(lua_State *L);

将栈顶设置到某个index:

void lua_settop(lua_State *L, int index);

如果index小于The Stack中的元素个数,那么The Stack发生截断;
如果index对应的即是栈顶元素,那么不做任何操作;
如果index对应的元素不存在,那么,The Stack将设置栈顶到index对应除,并使用nil填充扩展的值;

将某个元素复制后,push到栈顶

void lua_pushvalue(lua_State *L, int index);

旋转操作(暂时未看源码,不知何用)

void lua_rotate(lua_State *L, int index, int n);

拷贝指定位置的元素值到目标位置

拷贝 fromidx 对应的值到 toidx位置,于是toidx位置的值便无法再被访问

void lua_copy (lua_State *L, int fromidx, int toidx);

宏定义

#define lua_insert(L,idx)   lua_rotate(L, (idx), 1)

#define lua_remove(L,idx)   (lua_rotate(L, (idx), -1), lua_pop(L, 1))

#define lua_replace(L,idx)  (lua_copy(L, -1, (idx)), lua_pop(L, 1))

平凡操作

以下的操作,将不发生任何变化

lua_settop(L, -1);
lua_insert(L, -1);
lua_copy(L, x, x);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容