概述
其他栈操作
除了上述在 C 语言和栈之间交换数据的函数外,C API 还提供了下列用于通用栈操作的函数
int 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 将一个索引上的值复制到另一个索引上,并且原值不受影响。
#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程序设计(八十二)其他栈操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复