Lua api(一)

作者: AlbertS | 来源:发表于2016-06-26 17:04 被阅读847次

前言#

最近看了一下Lua与C++的交互,发现只是写lua而不了解lua与C++相互调用的过程,确实是一件苦恼的事情,所以我决定先熟悉一下lua的api,不需要多,每天学习一两个就可以。

内容#


lua_gettop##

  • 原型:int lua_gettop (lua_State *L);
  • 解释:返回栈顶元素的索引。 因为索引是从 1 开始编号的, 所以这个结果等于堆栈上的元素个数(因此返回 0 表示堆栈为空)。

lua_settop##

  • 原型:void lua_settop (lua_State *L, int index);
  • 解释:参数允许传入任何可接受的索引以及 0 。 它将把堆栈的栈顶设为这个索引。 如果新的栈顶比原来的大,超出部分的新元素将被填为 nil 。 如果 index 为 0 ,把栈上所有元素移除。

Usage##

  • c使用lua api代码:
void test_api_gettop()
{
    lua_State *L = lua_open();
    printf("begininit : stack hight = %d\n", lua_gettop(L));

    lua_pushinteger(L,6);
    lua_pushinteger(L,6);
    printf("pushargvs : stack hight = %d\n", lua_gettop(L));

    lua_settop(L, 0);
    printf("settopfun : stack hight = %d\n", lua_gettop(L));
}
  • 结果
api(一).png

结论#

  • 这两个api通常是成对出现的,一个是获得栈内元素个数,一个是设置栈内元素个数
  • 在实际使用过程中这两个一般也是不分离的,比如:在调用lua函数前,需要先获得栈内元素个数保存在变量中,然后使用lua_pcall调用lua函数,最后再将栈内元素个数设置成原来的数量保证函数执行前后栈内元素不变(当然,一般情况下执行完lua函数后参数和函数都被弹出栈了,栈内元素数量应该是不变的)。

相关文章

  • FreeSWITCH环境Lua API参考手册

    Lua API Reference 关于 本页面提供Lua的FreeSWITCH API文档。 API Sessi...

  • Lua API (state manipulation)

    一:LUA_API lua_State* (lua_newstate)(lua_Alloc f, void* ud...

  • Lua C API

    C API 云风Blog:Lua C API 的正确用法 C读取和调用Lua文件的库:lua.h, lauxlib...

  • lua 参考手册

    api lua文档 http://lua.hust.cc/ lua port : http://www.eluap...

  • LuaC API

    Lua C APi 总结 Lua_newtable(L) 创建table并放到栈顶 lua_pushstring(...

  • 在spring-data-redis中使用lua脚本

    参考 Lua 脚本Programming in Lua api 使用 RedisScript 使用 Redi...

  • Lua API (basic stack manipulatio

    一:LUA_API int (lua_gettop)(lua_State* L) 用途:返回栈顶元素的索引 由于索...

  • Lua api(一)

    前言# 最近看了一下Lua与C++的交互,发现只是写lua而不了解lua与C++相互调用的过程,确实是一件苦恼的事...

  • lua_newstate

    version 5.3.5 1、lua_newstate是由lstate.c提供的lua内部函数,由LUA_API...

  • Lua扩展

    lua作为配置文件使用 使用LUA API分析这个文件,并获取width和height table操作lua 5....

网友评论

    本文标题:Lua api(一)

    本文链接:https://www.haomeiwen.com/subject/jltzdttx.html