Lua api(【官方澳门新永利下载】七) lua_remove/lua_replace

初步了解过lua的人都知道,lua和c交互式通过虚拟栈来实现的,这个栈造就了lua的神奇,那么我们今天来看看怎样直接操作这个虚拟栈,首先我们要知道c调用lua和函数是通过和struct
lua_State相关的栈来交换数据的,而Lua
调用C函数用的栈是临时的,调用结束之后就被销毁了。我们下面要讲的是c调用lua的栈,我们可以通过特定的api来改变栈内数据。

前面我们讲了lua_getfield和lua_setfield两个api,也了解到这两个api的调用会触发table的元方法,今天我再来看两个会调用的元方法的api,这两个api同时也是一对,一个取值一个赋值,可以实现在c++中修改lua脚本中table的值。

  • 原型:void lua_remove (lua_State *L, int index);
  • 解释: 从给定有效索引处移除一个元素,
    把这个索引之上的所有元素移下来填补上这个空隙。
  • 原型:void lua_gettable (lua_State *L, int index);
  • 解释: 把 t[k] 值压入堆栈, 这里的 t 是指有效索引 index 指向的值,
    而 k 则是栈顶放的值。这个函数会弹出堆栈上的 key
    (把结果放在栈上相同位置)。 在 Lua 中这个函数可能触发对应 “index”
    事件的元方法。

  • 原型:void lua_replace (lua_State *L, int index);
  • 解释:把栈顶元素移动到给定位置(并且把这个栈顶元素弹出),
    不移动任何元素(因此在那个位置处的值被覆盖掉)。
  • 原型:void lua_settable (lua_State *L, int index);
  • 解释: 作一个等价于 t[k] = v 的操作, 这里 t 是一个给定有效索引
    index 处的值, v 指栈顶的值, 而 k
    是栈顶之下的那个值。这个函数会把键和值都从堆栈中弹出。 和在 Lua
    中一样,这个函数可能触发 “newindex” 事件的元方法。

  • 首先我们先新建一个文件,文件命名为removetest.lua编写如下代码:
  • 首先我们来新建一个文件,将文件命名为gettabletest.lua编写如下代码:

发表评论

电子邮件地址不会被公开。 必填项已用*标注