lua_call的使用

void lua_call (lua_State *L, int nargs, int nresults);
L是执行环境,可以理解为当前栈,nargs参数个数,nresults返回值个数。lua_pcall和该函数区别是多一个参数,用于发生错误处理时的代码返回。
void lua_pcall(lua_State *L,int nargs, int nresults,int nerrfunc);lua_cpcall则又多一个用于传递用户自定义的数据结构的指针
void lua_pcall(lua_State *L,int nargs, int nresults,int nerrfunc,void* ud)
对于函数的使用场景,在网上有一个网友的说明是这样的:
lua_call的运行是无保护的,他与lua_pcall相似,但是在错误发生的时候她抛出错误而不是返回错误代码。当你在应用程序中写主流程的代码时,不应该使用lua_call,因为你应该捕捉任何可能发生的错误。当你写一个函数的代码时,使用lua_call是比较好的想法,如果有错误发生,把错误留给关心她的人去处理.
结论:写应用程序主流程代码用lua_pcall写C Native Function代码时用lua_call,与之类似的还有luaL_checkxxx
下面是一个在文档中列举的一个例子:
The following example shows how the host program can do the equivalent to this Lua code:
a = f("how", t.x, 14)Here it is in C:
在上面的例子除了描述了lua_call的使用外,还对lua_getfield的使用有一定的参考价值。特别是学习如何在一个表中获取他的值。lua_getfield(L, LUA_GLOBALSINDEX, "f"); /* function to be called */ lua_pushstring(L, "how"); /* 1st argument */ lua_getfield(L, LUA_GLOBALSINDEX, "t"); /* table to be indexed */ lua_getfield(L, -1, "x"); /* push result of t.x (2nd arg) */ lua_remove(L, -2); /* remove 't' from the stack */ lua_pushinteger(L, 14); /* 3rd argument */ lua_call(L, 3, 1); /* call 'f' with 3 arguments and 1 result */ lua_setfield(L, LUA_GLOBALSINDEX, "a"); /* set global 'a' */
在上面的例子中,可能再调用lua_getfield时就会忘记调用lua_remove,当然这是我想象自己使用时会犯下的错。lua_getfield函数功能是从指定表中取出指定元素的值并压栈。上面获取t.x的值的过程就是先调用lua_getfield(L, LUA_GLOBALSINDEX, "t"); 从全局表中获取t的值,然而t本身是一个表,现在栈顶的值是t表。于是再一次lua_getfield(L, -1, "x"); 从t中取出x的值放到栈上,-1表示栈顶。那该函数执行完成后t的位置由-1就变成-2了,所以下面一句lua_remove索引的是-2,必须把t给remove掉,否则栈中就是4个参数了。上面的最后一句lua_setfield的目的是把返回值取回赋给全局变量a,因为在lua_call执行完成后,栈顶的就是返回值了。
相关内容
学习写字楼新选择6000元主流配置
学习写字楼新选择6000元主流配置,,这种配置需要考虑双核心的办...
excel怎么用乘法函数
excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、...
excel中乘法函数是什么?
excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中...
标准差excel用什么函数?
标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输...
Lucene学习之高亮显示
Lucene学习之高亮显示,索引,字符,在搜索引擎中我们经常会看到...
电脑函数不正确|电脑出现函数不正确
电脑函数不正确|电脑出现函数不正确,,1. 电脑出现函数不正确故...
这种配置还不知道。它主要用于日常学习和娱乐,偶
这种配置还不知道。它主要用于日常学习和娱乐,偶尔玩游戏。,,CP...
excel函数公式快捷键|excel公式的快捷键
excel函数公式快捷键|excel公式的快捷键,,1. excel公式的快捷...
探探语言设置|探探怎么设置语言
探探语言设置|探探怎么设置语言,,1. 探探怎么设置语言打开探探...
使用函数的快捷键固定|函数公式锁定快捷键
使用函数的快捷键固定|函数公式锁定快捷键,,1. 函数公式锁定快...
excel常用函数都有哪些?
excel常用函数都有哪些?,函数,哪些,常用,1、SUM函数:SUM函数的作...
git设置编码|git语言设置
git设置编码|git语言设置,,git设置编码点击cap4j搜索从git直接...
2、学习lucene之索引删除、恢复删除、强制删除
2、学习lucene之索引删除、恢复删除、强制删除,索引,位置, ...
电脑语言怎么切换不了|电脑哪里设置语言切换
电脑语言怎么切换不了|电脑哪里设置语言切换,,电脑哪里设置语...
苹果5s怎么设置中文版|苹果5s怎么设置语言
苹果5s怎么设置中文版|苹果5s怎么设置语言,,1. 苹果5s怎么设置...