C语言中调用Lua函数实例
记得上学时,初中英文课本中,上网叫做surfing the internet,中文叫网上冲浪。那个时期,人们经常称互联网为赛博空间。如今工作了,大量的零碎时间用于上微博,知乎,QQ,这些碎片化的阅读让人读起来轻松,也能获取些粗浅的信息。然而它们是消耗时间的黑洞,时间就这样一分一秒地飞逝,年末的时候,知乎会告诉你回答了多少问题,阅读了相当于一部《红楼梦》那么多的文字。只是当你静下来一想,这些浅阅读并没给你带来有深度,系统的知识。在你的时间线上,两条相邻信息往往是八竿子也打不着的。而且你还时不时去看看关注者有没有更新,期待让你眼前一亮的信息。结果往往是趁兴而去,败兴而回。屏幕上的信息永无止境地滚动着,是如此的热闹,仿佛每个人都在狂欢,而我的内心却如此的空虚与孤独。
在lua API中,调用一个函数的步骤很简单:
1.压入你要调用的函数,使用lua_getglobal。
2.压入调用参数。
3.使用lua_pcall
4.从栈中弹出结果。
举例说明,假设你有这么一个lua函数:
代码如下:
function f (x, y) return (x^2 * math.sin(y))/(1 - x) end
那么,我们就可以定义个c函数来封装这个调用:
代码如下:
/* call a function 'f' defined in Lua */ double f (double x, double y) { double z; lua_getglobal(L, "f"); lua_pushnumber(L, x); lua_pushnumber(L, y); /* do the call (2 arguments, 1 result) */ if (lua_pcall(L, 2, 1, 0) != 0) error(L, "error running function 'f': %s", lua_tostring(L, -1)); if (!lua_isnumber(L, -1)) error(L, "function 'f' must return a number"); z = lua_tonumber(L, -1); lua_pop(L, 1); return z; }
lua_pcall在压入结果的之前,会将函数,和参数弹出,如果返回多个结果,第一个最先压入。如果lua_pcall运行出错,那么会返回个非0值。
(完)
相关推荐
taoqilin 2020-01-18
wangzhaotongalex 2020-09-22
古叶峰 2020-11-16
linmufeng 2020-09-08
xiaoxiaokeke 2020-07-28
好好学习天天 2020-07-21
83417807 2020-07-19
小方哥哥 2020-07-09
wbczyh 2020-07-05
pwc 2020-06-26
flowerCSDN 2020-06-16
Wonder的学习 2020-06-13
周小董 2020-06-10
luvhl 2020-06-08
nurvnurv 2020-06-05
Andrewjdw 2020-05-27
米虚 2020-05-19