1 回答

TA貢獻1890條經驗 獲得超9個贊
在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值。
- 1 回答
- 0 關注
- 709 瀏覽
添加回答
舉報